<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5351570291681062564</id><updated>2026-02-04T14:37:26.966-10:00</updated><category term="Asterisk® SCF™"/><category term="Dialplan LUA"/><category term="Tutorial"/><category term="CODEC"/><category term="PJSIP"/><category term="SIP"/><category term="AEAP"/><category term="CISCO; PACKET TRACER;"/><category term="Clustering"/><category term="Debian"/><category term="GNU/Linux"/><category term="IAX2"/><category term="Mundo Livre"/><category term="NAT"/><category term="Ubuntu"/><category term="VoIP Peering"/><category term="WebRTC®"/><category term="Yeti"/><title type='text'>A.B.Delphini™</title><subtitle type='html'>“Não importa o método empregado na construção da ponte; o essencial é compreender a engenharia que a sustenta.” — Delphini, 2025.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.delphini.tel/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>69</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-5146622582720968223</id><published>2026-02-03T08:22:00.002-10:00</published><updated>2026-02-03T08:55:14.130-10:00</updated><title type='text'>Módulo DISPATCHER Kamailio vs Módulo DISPATCHER OpenSIPS </title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhegKMcg4cHPr8Fjf3ND_RfDYO8gPTFpDIxWQsylL1BRuQGNJ-Q-GHe_oR_qMgelCSoyWl54zk01zZUQCALBvXA87i26lM8egz9a8fH98gxqPYbXB4LhuW9AqTKyUQT2eZbCqnhXiQzwIHYZfpW6sjXoWndD3yh1EVqFLIxbz77u3qHCE35rEby-rcP8hw/s1400/kamailio-header.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;250&quot; data-original-width=&quot;1400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhegKMcg4cHPr8Fjf3ND_RfDYO8gPTFpDIxWQsylL1BRuQGNJ-Q-GHe_oR_qMgelCSoyWl54zk01zZUQCALBvXA87i26lM8egz9a8fH98gxqPYbXB4LhuW9AqTKyUQT2eZbCqnhXiQzwIHYZfpW6sjXoWndD3yh1EVqFLIxbz77u3qHCE35rEby-rcP8hw/s16000/kamailio-header.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-path-to-node=&quot;2&quot; style=&quot;text-align: justify;&quot;&gt;Kamailio Dispatcher&lt;/h3&gt;&lt;h4 data-path-to-node=&quot;3&quot; style=&quot;text-align: justify;&quot;&gt;Pontos Fortes&lt;/h4&gt;&lt;p data-path-to-node=&quot;4&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4&quot;&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=load+balancing+algorithms&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;Algoritmos de Balanceamento Avançados&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;5,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Oferece múltiplos algoritmos de distribuição: hash, round-robin, baseado em peso (weight-based) e menor uso (least-used/call load).&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Suporte para distribuição baseada em &lt;/span&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+SIP+keys+session+persistence&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; style=&quot;text-align: justify;&quot; target=&quot;_blank&quot;&gt;chaves do SIP&lt;/a&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;: Call-ID, From URI, To URI e Request URI (garantindo persistência de sessão para o mesmo destino).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Algoritmo de peso dinâmico que permite ajustar a carga distribuída conforme a capacidade de processamento do servidor de destino.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;6&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;Detecção Proativa de Falhas (Health Check)&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;7,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Monitoramento contínuo (Heartbeat) via &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+SIP+OPTIONS+protocol&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;SIP OPTIONS&lt;/a&gt; com intervalos e limites configuráveis.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Detecção rápida de servidores indisponíveis (down) e recuperação automática (probing mode).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Suporte flexível para definição de códigos de resposta aceitáveis (ex: considerar 404 como ativo, mas 503 como falha).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;8&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8&quot;&gt;Flexibilidade na Configuração&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;9,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Configuração dinâmica de destinos sem necessidade de reiniciar o servidor (via comando &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Kamailio+kamcmd&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;kamcmd&lt;/a&gt; ou reload).&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Suporte a múltiplos grupos de destinos (sets), permitindo segregar rotas (ex: PSTN, Interno, Failover).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Possibilidade de configurar destinos de prioridade e backup dentro do mesmo grupo.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;10&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10&quot;&gt;Escalabilidade e Performance&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;11,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Otimizado para alto rendimento (milhares de &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=CPS+telecommunications+performance+metric&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;CPS&lt;/a&gt;) e baixíssima latência.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Suporte nativo para IPv6 e transporte dual-stack.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Gerenciamento eficiente de memória compartilhada (shm) para lidar com grandes volumes de tráfego.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;12&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12&quot;&gt;Integração com Banco de Dados e Cluster&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;13,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Capacidade de carregar destinos diretamente de tabelas de banco de dados (MySQL/PostgreSQL), ideal para integração com painéis web.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Integração com o módulo DMQ (Distributed Message Queue) para sincronizar o estado dos gateways (up/down) entre múltiplos servidores Kamailio em tempo real (Cluster Ativo-Ativo).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;14&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14&quot;&gt;Controle via Event Routes&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;15,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Execução de scripts personalizados quando um destino cai ou volta (event_route[dispatcher:dst-down]), permitindo notificações externas, logs personalizados ou alertas via API.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 data-path-to-node=&quot;16&quot; style=&quot;text-align: justify;&quot;&gt;Pontos Fracos&lt;/h4&gt;&lt;p data-path-to-node=&quot;17&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17&quot;&gt;Complexidade de Configuração&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;18,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Curva de aprendizado íngreme para configurações avançadas; não é plug-and-play.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Documentação oficial extensa, porém extremamente técnica e por vezes fragmentada.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Exige conhecimento profundo do fluxo SIP (Transaction, Dialog) para otimizações específicas.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;19&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19&quot;&gt;Limitações no Failover Automático&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;20,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;O módulo apenas seleciona o destino. O failover (tentativa de nova rota) não é automático; deve ser programado manualmente dentro do bloco failure_route do script.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Certas situações de rede (como timeouts silenciosos) exigem configuração manual adicional de timers (fr_timer) para evitar travamento da chamada.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;21&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;Visibilidade Limitada da Camada de Aplicação&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;22,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;O Health Check via SIP OPTIONS verifica se a pilha SIP responde, mas não garante que a aplicação atrás dela (ex: banco de dados do Asterisk ou serviço de mídia) esteja funcional. O servidor pode responder &quot;200 OK&quot; no OPTIONS mas falhar ao processar uma chamada real se não houver verificações de nível de aplicação.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaRzhiW9w0dJ1HmV1pMCQh4RES7QwSeWEtemBA0Hr-EZuMsgnjKjdaIOQxOYjL_2gN7BzkCVgQrjONPx91yPm-hJLGMoqthUVUzi0fvscHkM_wtaLsG_hBt3HQx32ZOe4PeKtI7BXY6TbLHOP0doitfXVYUTPrKNdB30dm9c8HJltFsHqdogc1812JTEw/s703/OpenSIPS_logo.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;165&quot; data-original-width=&quot;703&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaRzhiW9w0dJ1HmV1pMCQh4RES7QwSeWEtemBA0Hr-EZuMsgnjKjdaIOQxOYjL_2gN7BzkCVgQrjONPx91yPm-hJLGMoqthUVUzi0fvscHkM_wtaLsG_hBt3HQx32ZOe4PeKtI7BXY6TbLHOP0doitfXVYUTPrKNdB30dm9c8HJltFsHqdogc1812JTEw/s16000/OpenSIPS_logo.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h3 data-path-to-node=&quot;2&quot;&gt;OpenSIPS Dispatcher&lt;/h3&gt;&lt;h4 data-path-to-node=&quot;3&quot;&gt;Pontos Fortes&lt;/h4&gt;&lt;p data-path-to-node=&quot;4&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4&quot;&gt;Simplicidade e Facilidade de Uso&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;5,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Configuração mais intuitiva e direta (menos &quot;verbosa&quot; que o Kamailio).&lt;/li&gt;&lt;li&gt;Documentação oficial clara, bem estruturada e rica em exemplos práticos.&lt;/li&gt;&lt;li&gt;Curva de aprendizado mais suave para iniciantes em &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=what+is+SIP+Proxy&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;Proxy SIP&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;6&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;Integração com Ecossistema &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=OpenSIPS&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;OpenSIPS&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;7,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Integração nativa e fluida com a ferramenta de linha de comando (&lt;code data-index-in-node=&quot;65&quot; data-path-to-node=&quot;7,0,0&quot;&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=OpenSIPS+opensips-cli&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;opensips-cli&lt;/a&gt;&lt;/code&gt;), facilitando a gestão operacional.&lt;/li&gt;&lt;li&gt;Interface gráfica (&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=OpenSIPS+Control+Panel+features&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;Control Panel&lt;/a&gt;) intuitiva disponível para gestão de destinos sem tocar em código.&lt;/li&gt;&lt;li&gt;Excelente interação com módulos de cache NoSQL (Redis/Cassandra) para estratégias de roteamento.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;8&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8&quot;&gt;Estabilidade Comprovada&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;9,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Implementação madura e extremamente estável em ambientes de produção (foco em versões LTS).&lt;/li&gt;&lt;li&gt;Menos mudanças disruptivas de sintaxe entre versões principais (backward compatibility).&lt;/li&gt;&lt;li&gt;Comportamento previsível em diferentes cenários de falha.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;10&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10&quot;&gt;Gerenciamento de Estado e Clustering&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;11,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Gerenciamento eficiente do estado dos destinos (Active/Probing/Inactive).&lt;/li&gt;&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,0&quot;&gt;Integração com Módulo Clusterer:&lt;/b&gt; Diferente do Kamailio (que usa DMQ), o OpenSIPS utiliza uma camada de clustering binária nativa para replicar o estado do dispatcher entre nós. É robusto e fácil de configurar para manter a consistência em topologias Anycast.&lt;/li&gt;&lt;li&gt;Sincronização eficaz entre processos &lt;i data-index-in-node=&quot;37&quot; data-path-to-node=&quot;11,2,0&quot;&gt;worker&lt;/i&gt; (filhos) para evitar condições de corrida.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;12&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12&quot;&gt;Interface de Eventos&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;13,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,0&quot;&gt;Event Interface (EVI):&lt;/b&gt; Capacidade robusta de disparar eventos (via &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=RabbitMQ+message+queue+event+notification&amp;amp;bbid=5351570291681062564&amp;amp;bpid=5146622582720968223&quot; target=&quot;_blank&quot;&gt;RabbitMQ&lt;/a&gt;, HTTP, Datagram) quando o estado de um destino muda. Isso facilita muito a criação de dashboards de monitoramento externos em tempo real.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 data-path-to-node=&quot;14&quot;&gt;Pontos Fracos&lt;/h4&gt;&lt;p data-path-to-node=&quot;15&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15&quot;&gt;Algoritmos de Balanceamento Mais Limitados&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;16,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Menos opções de algoritmos de distribuição se comparado ao Kamailio (que possui variações de hash mais granulares).&lt;/li&gt;&lt;li&gt;Algoritmos de peso (&lt;i data-index-in-node=&quot;20&quot; data-path-to-node=&quot;16,1,0&quot;&gt;weight-based&lt;/i&gt;) menos sofisticados para cenários de cargas extremamente assimétricas.&lt;/li&gt;&lt;li&gt;Limitações em balanceamento baseado em métricas dinâmicas de carga do servidor remoto (CPU/Memória do destino).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;17&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17&quot;&gt;Capacidades de Monitoramento (Health Check)&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;18,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Opções de &lt;i data-index-in-node=&quot;10&quot; data-path-to-node=&quot;18,0,0&quot;&gt;health checking&lt;/i&gt; menos flexíveis em termos de personalização de pacotes SIP (embora cumpra bem o papel com OPTIONS).&lt;/li&gt;&lt;li&gt;Intervalos de monitoramento e lógicas de &quot;recovery&quot; (histerese) menos granulares que o concorrente.&lt;/li&gt;&lt;li&gt;Menor variedade nativa de métodos de detecção de falhas fora do protocolo SIP (ex: checagem pura de porta TCP/ICMP integrada na lógica de decisão).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;19&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19&quot;&gt;Escalabilidade em Cenários Extremos&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;20,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Embora extremamente performático, pode apresentar limitações de &lt;i data-index-in-node=&quot;64&quot; data-path-to-node=&quot;20,0,0&quot;&gt;throughput&lt;/i&gt; em cenários de altíssimo tráfego (milhares de CPS concentrados) devido a diferenças na gestão de &lt;i data-index-in-node=&quot;172&quot; data-path-to-node=&quot;20,0,0&quot;&gt;locks&lt;/i&gt; de memória compartilhada em comparação ao Kamailio.&lt;/li&gt;&lt;li&gt;Menos otimizações de baixo nível para casos de uso muito específicos de alta carga de sinalização.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;21&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;Dependência de Scripting para Failover&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;22,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Assim como no Kamailio, o failover não é &quot;automático&quot; no sentido de &quot;configurar e esquecer&quot;. Requer implementação lógica no script de roteamento (&lt;code data-index-in-node=&quot;146&quot; data-path-to-node=&quot;22,0,0&quot;&gt;failure_route&lt;/code&gt;) para decidir o que fazer quando o Dispatcher retorna um destino falho.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-path-to-node=&quot;2&quot; style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-top: 0px;&quot;&gt;Comparação Técnica Direta: Kamailio vs OpenSIPS&lt;/h3&gt;&lt;table data-path-to-node=&quot;3&quot; style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-bottom: 32px; margin-top: 0px;&quot;&gt;&lt;thead style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-bottom: 0px; margin-top: 0px;&quot;&gt;Característica&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-bottom: 0px; margin-top: 0px;&quot;&gt;Kamailio&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-bottom: 0px; margin-top: 0px;&quot;&gt;OpenSIPS&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;span data-path-to-node=&quot;3,1,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,1,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Algoritmos de Balanceamento&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,1,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,1,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Extenso (8+):&lt;/b&gt; Hash granular, Load-balancing real, Peso dinâmico, Latência e Custo.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,1,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,1,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Essencial (4-5):&lt;/b&gt; Focados em Round-Robin, Peso e Hashing básico. Eficientes, mas com menos opções nativas.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,2,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,2,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Health Checking (Monitoramento)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,2,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,2,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Altamente Configurável:&lt;/b&gt; SIP OPTIONS, HTTP (via curl), Scripting personalizado e integração com &lt;i data-index-in-node=&quot;95&quot; data-path-to-node=&quot;3,2,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Keepalived&lt;/i&gt;.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,2,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,2,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Focado em SIP:&lt;/b&gt; Principalmente SIP OPTIONS. Forte integração com o módulo &lt;i data-index-in-node=&quot;73&quot; data-path-to-node=&quot;3,2,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Clusterer&lt;/i&gt; para compartilhar estado.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,3,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,3,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Configuração Dinâmica&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,3,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,3,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Excelente:&lt;/b&gt; Recarregamento quase total sem restart (&lt;i data-index-in-node=&quot;51&quot; data-path-to-node=&quot;3,3,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;hot-reload&lt;/i&gt;), forte uso de Database (MySQL/PostgreSQL) e &lt;i data-index-in-node=&quot;107&quot; data-path-to-node=&quot;3,3,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;KEMI&lt;/i&gt;.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,3,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,3,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Muito Boa:&lt;/b&gt; Ferramentas de CLI robustas e Painel de Controle (CP) nativo para gestão de dados em tempo real.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,4,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,4,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Performance e Scalabilidade&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,4,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,4,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Superior em Throughput Bruto:&lt;/b&gt; Otimizado para volumes massivos de pacotes e gestão de memória compartilhada em cenários extremos.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,4,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,4,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Alto Desempenho:&lt;/b&gt; Excelente para a maioria dos cenários de operadoras (Carrier Grade), com foco em lógica de roteamento complexa.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,5,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,5,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Facilidade de Uso&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,5,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,5,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Complexa:&lt;/b&gt; Curva de aprendizado íngreme. Arquitetura modular que exige entender &quot;como as peças se encaixam&quot;.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,5,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,5,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Moderada/Simples:&lt;/b&gt; Sintaxe de script mais intuitiva (&quot;human-readable&quot;), documentação mais didática e ferramentas de gestão mais amigáveis.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,6,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,6,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Linguagens de Script (Adicionado)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,6,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,6,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;KEMI (Poderoso):&lt;/b&gt; Permite escrever a lógica de roteamento em Python, Lua, Go, Ruby ou JavaScript.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,6,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,6,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Script Nativo:&lt;/b&gt; Foco na linguagem nativa do OpenSIPS. Suporte a Python/Perl existe, mas é menos central que no Kamailio.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,7,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,7,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Clustering/Alta Disponibilidade (Adicionado)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,7,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,7,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;DMQ (Distributed Message Queue):&lt;/b&gt; Baseado em troca de mensagens SIP para replicar estado (leve e desacoplado).&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,7,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,7,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Clusterer (Binário):&lt;/b&gt; Protocolo binário próprio para sincronização de estado. Muito robusto para topologias complexas.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,8,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,8,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Documentação&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,8,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,8,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Extensa (Wiki):&lt;/b&gt; Muita informação, mas muitas vezes fragmentada, desatualizada ou espalhada em módulos diferentes.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,8,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,8,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Organizada (Manual):&lt;/b&gt; Bem estruturada, centralizada e geralmente atualizada com a versão do software.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,9,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,9,0,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Comunidade e Ciclo de Vida&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,9,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,9,1,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Muito Ativa / Ciclo Rápido:&lt;/b&gt; Muitas atualizações, recursos novos constantes. Ótimo para quem quer &quot;bleeding edge&quot;.&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid; line-height: 1.15; margin-top: 0px; text-align: justify;&quot;&gt;&lt;span data-path-to-node=&quot;3,9,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,9,2,0&quot; style=&quot;line-height: 1.15; margin-top: 0px;&quot;&gt;Estável / Ciclo LTS:&lt;/b&gt; Foco maior em versões de Longo Suporte (LTS) e estabilidade para ambientes corporativos (Enterprise).&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-path-to-node=&quot;2&quot;&gt;Casos de Uso Recomendados&lt;/h3&gt;&lt;h4 data-path-to-node=&quot;3&quot;&gt;Use o Kamailio Dispatcher quando:&lt;/h4&gt;&lt;p data-path-to-node=&quot;4,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Necessitar de algoritmos de balanceamento sofisticados e lógica complexa de roteamento.&lt;/li&gt;&lt;li&gt;Lidar com volume de tráfego extremamente alto (&amp;gt; 1.000 CPS) e picos agressivos.&lt;/li&gt;&lt;li&gt;Exigir máxima flexibilidade e controle granular sobre a memória e o fluxo da transação.&lt;/li&gt;&lt;li&gt;Tiver uma equipe com experiência avançada em Engenharia SIP e desenvolvimento.&lt;/li&gt;&lt;li&gt;A otimização de performance bruta e a latência mínima forem requisitos críticos.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 data-path-to-node=&quot;5&quot;&gt;Use o OpenSIPS Dispatcher quando:&lt;/h4&gt;&lt;p data-path-to-node=&quot;6,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Priorizar a simplicidade de configuração, legibilidade do script e facilidade de manutenção.&lt;/li&gt;&lt;li&gt;Tiver uma equipe com foco maior em Operação e menos experiência profunda em &quot;escovação de bits&quot; SIP.&lt;/li&gt;&lt;li&gt;Precisar de uma solução estável, previsível e focada em versões LTS (Long Term Support).&lt;/li&gt;&lt;li&gt;O volume de tráfego for de nível corporativo ou médio (foco em lógica de negócio e não apenas em rendimento bruto).&lt;/li&gt;&lt;li&gt;Valorizar a integração nativa com ferramentas de gerenciamento visual (Control Panel) e linha de comando (CLI).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8&quot;&gt;Nota Técnica da Engenharia:&lt;/b&gt;
Embora o texto original sugira o OpenSIPS para tráfego &quot;&amp;lt; 500 CPS&quot;, é importante ressaltar que em hardware moderno (como os servidores que usamos na Saper), o OpenSIPS lida tranquilamente com volumes muito superiores a isso. A distinção real é: &lt;b data-index-in-node=&quot;273&quot; data-path-to-node=&quot;8&quot;&gt;Kamailio&lt;/b&gt; para força bruta e escalabilidade extrema; &lt;b data-index-in-node=&quot;325&quot; data-path-to-node=&quot;8&quot;&gt;OpenSIPS&lt;/b&gt; para estabilidade empresarial e facilidade de gestão.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-path-to-node=&quot;2&quot;&gt;Conclusão e Recomendação&lt;/h3&gt;&lt;p data-path-to-node=&quot;3&quot;&gt;Para a maioria das implementações empresariais (&lt;i data-index-in-node=&quot;48&quot; data-path-to-node=&quot;3&quot;&gt;Enterprise&lt;/i&gt;), recomendo o &lt;b data-index-in-node=&quot;73&quot; data-path-to-node=&quot;3&quot;&gt;OpenSIPS Dispatcher&lt;/b&gt; pelas seguintes razões:&lt;/p&gt;&lt;p data-path-to-node=&quot;4,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,0,0&quot;&gt;Curva de aprendizado mais suave:&lt;/b&gt; Permite implementações mais rápidas (&lt;i data-index-in-node=&quot;70&quot; data-path-to-node=&quot;4,0,0&quot;&gt;Time-to-market&lt;/i&gt;) e reduz a chance de erros humanos na configuração.&lt;/li&gt;&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,1,0&quot;&gt;Manutenção simplificada:&lt;/b&gt; Menor complexidade operacional a longo prazo, facilitando a vida da equipe de sustentação.&lt;/li&gt;&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,2,0&quot;&gt;Estabilidade comprovada:&lt;/b&gt; Comportamento mais previsível e robusto em ambientes de produção.&lt;/li&gt;&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,3,0&quot;&gt;Ecossistema integrado:&lt;/b&gt; Melhor integração nativa com ferramentas de gerenciamento (GUI e CLI).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;5&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5&quot;&gt;No entanto, escolha o Kamailio Dispatcher se:&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;6,0,0&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Sua organização gerencia tráfego de volume muito alto (cenários de &lt;i data-index-in-node=&quot;67&quot; data-path-to-node=&quot;6,0,0&quot;&gt;Carrier&lt;/i&gt; ou Atacado).&lt;/li&gt;&lt;li&gt;Você precisa de algoritmos de balanceamento muito específicos ou customizados.&lt;/li&gt;&lt;li&gt;Você possui uma equipe técnica altamente experiente em engenharia SIP (C/Linux).&lt;/li&gt;&lt;li&gt;Você requer a máxima otimização de performance e controle de memória.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;7&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7&quot;&gt;Consideração Híbrida (Arquitetura Mista):&lt;/b&gt;
Em ambientes complexos, você pode utilizar o &lt;b data-index-in-node=&quot;87&quot; data-path-to-node=&quot;7&quot;&gt;OpenSIPS como Proxy de Borda/Entrada&lt;/b&gt; (pela simplicidade e segurança) e o &lt;b data-index-in-node=&quot;160&quot; data-path-to-node=&quot;7&quot;&gt;Kamailio para funções de Core&lt;/b&gt; com alta carga (pela performance bruta), obtendo assim o melhor dos dois mundos.&lt;/p&gt;&lt;p data-path-to-node=&quot;8&quot;&gt;A decisão final deve basear-se no seu contexto específico: volume de tráfego, nível de experiência da equipe, requisitos de SLA e a complexidade do seu ambiente de rede.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p data-path-to-node=&quot;4&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4&quot;&gt;Delphini, Dell&lt;/b&gt;&amp;nbsp;&lt;i data-index-in-node=&quot;11&quot; data-path-to-node=&quot;4&quot;&gt;Senior C/C++/Python Developer &amp;amp; VoIP Specialist&lt;/i&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;5&quot;&gt;🎓 &lt;b data-index-in-node=&quot;3&quot; data-path-to-node=&quot;5&quot;&gt;Instrutor na Academia Saper&lt;/b&gt;
&lt;i data-index-in-node=&quot;31&quot; data-path-to-node=&quot;5&quot;&gt;Domine a engenharia por trás do Asterisk, OpenSIPS e Kamailio.&lt;/i&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;6&quot;&gt;📞 (48) 3121-0110
🌐 &lt;b data-index-in-node=&quot;21&quot; data-path-to-node=&quot;6&quot;&gt;Blog:&lt;/b&gt; www.delphini.tel | &lt;b data-index-in-node=&quot;46&quot; data-path-to-node=&quot;6&quot;&gt;Saper:&lt;/b&gt; www.saperx.com.br&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/5146622582720968223/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/5146622582720968223' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/5146622582720968223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/5146622582720968223'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2026/02/modulo-dispatcher-kamailio-vs-modulo.html' title='Módulo DISPATCHER Kamailio vs Módulo DISPATCHER OpenSIPS '/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhegKMcg4cHPr8Fjf3ND_RfDYO8gPTFpDIxWQsylL1BRuQGNJ-Q-GHe_oR_qMgelCSoyWl54zk01zZUQCALBvXA87i26lM8egz9a8fH98gxqPYbXB4LhuW9AqTKyUQT2eZbCqnhXiQzwIHYZfpW6sjXoWndD3yh1EVqFLIxbz77u3qHCE35rEby-rcP8hw/s72-c/kamailio-header.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-4667283449631980662</id><published>2025-07-14T06:10:00.001-10:00</published><updated>2025-07-14T06:10:07.694-10:00</updated><title type='text'>Kamailio - Entendendo a lógica de roteamento.</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4EdCkdb1ev8BL6kibF9dQdIPCBglaKed7khzEDNrtDnGm7gdW5o-mbMttMBpG-XJjeP3rDNUeo8kVISWlkWDfiNp6qz0dPS-Hq0pP4LgWc_82Vf94-2AHSlhZz-MHTx7B153TPh3L0o8DL9SbJ9Bt9m87Q7P1zlMWLlUKwVTJOPJ-caxijsAkxXSRLfQ/s391/kamailio_banner.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;216&quot; data-original-width=&quot;391&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4EdCkdb1ev8BL6kibF9dQdIPCBglaKed7khzEDNrtDnGm7gdW5o-mbMttMBpG-XJjeP3rDNUeo8kVISWlkWDfiNp6qz0dPS-Hq0pP4LgWc_82Vf94-2AHSlhZz-MHTx7B153TPh3L0o8DL9SbJ9Bt9m87Q7P1zlMWLlUKwVTJOPJ-caxijsAkxXSRLfQ/s16000/kamailio_banner.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O &lt;b&gt;mercado de VoIP&lt;/b&gt; (principalmente VoIP Peering) exige &lt;b&gt;profissionais com expertise em desenvolvimento ToIP&lt;/b&gt;. O crescimento contínuo das &lt;b&gt;ITSPs&lt;/b&gt; (Internet Telephony Service Provider) no Brasil tem &lt;b&gt;impulsionado uma demanda urgente por desenvolvedores especializados em soluções de Telefonia IP&lt;/b&gt; (ToIP), com ênfase em tecnologias robustas e escaláveis como o &lt;b&gt;Kamailio&lt;/b&gt;.&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Kamailio&lt;/b&gt; é hoje uma das ferramentas mais poderosas para desenvolvimento de servidores SIP de alta performance, capazes de gerenciar &lt;b&gt;milhares de chamadas por segundo&lt;/b&gt;, com &lt;b&gt;alta confiabilidade&lt;/b&gt;, &lt;b&gt;performance e escalabilidade&lt;/b&gt; - requisitos essenciais em ambientes de &lt;b&gt;VoIP Peering&lt;/b&gt; e &lt;b&gt;Operadoras VoIP&lt;/b&gt; (ITSP).&lt;/span&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O que o mercado espera desses profissionais ?&lt;/span&gt;&lt;/h4&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Domínio no desenvolvimento e customização de soluções com &lt;b&gt;Kamailio&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Conhecimento de &lt;b&gt;protocolos SIP&lt;/b&gt;, &lt;b&gt;UDP&lt;/b&gt;, &lt;b&gt;TCP&lt;/b&gt;, &lt;b&gt;SCTP&lt;/b&gt;, &lt;b&gt;TLS&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;SIP-I&lt;/b&gt; (SIP for ISUP) e &lt;b&gt;SIP-T&lt;/b&gt; (SIP for Telephones).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Suporte a &lt;b&gt;NAT Traversal&lt;/b&gt;, &lt;b&gt;IPv4&lt;/b&gt;/&lt;b&gt;IPv6&lt;/b&gt;,&lt;b&gt; failover&lt;/b&gt; e &lt;b&gt;load balancing&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Implementação de &quot;&lt;b&gt;Kamailio Multi-SIP Interop com Dialplan Database Control - DDC&lt;/b&gt;&quot;. Que é a ideia de suportar chan_sip, chan_pjsip, SIP-I e SIP-T, e ainda controlar tudo via Banco de Dados.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Implementação de interfaces com Banco de Dados (DDC) e RADIUS.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Desenvolvimento de soluções com suporte apresença (SIMPLE), dialogue info e CDRs.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Capacidade de integrar e desenvolver com Asterisk, FreeSWITCH e WebRTC.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Desenvolvimento completo: Backend e Interface Grafica (GUI) para gestão das soluções.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;São poucos os profissionais e empresas no mundo com domínio avançado em &lt;b&gt;Kamailio&lt;/b&gt; e outras tecnologias VoIP combinadas. Essa é uma oportunidade de ouro para quem busca se posicionar como especialista em uma área estratégica e carente de talentos.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Se você atua com desenvolvimento VoIP, ou pretende entrar nesse nicho promissor, o momento é agora. O mercado está aquecido e exige profissionais prontos para entregar soluções robustas, escaláveis e personalizadas.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Dito isso, um dos aspectos mais importantes e, ao mesmo tempo difíceis de entender no Kamailio é a lógica de roteamento, pois ela tem muito a ver com o comportamento do protocolo SIP.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Após alguns estudos mais detalhados, resolvi passar aqui a minha visão de entendimento sobre o comportamento do Kamailio, principalmente no kamailio.cfg. E esse vai ser o objetivo deste post, e vou tentar adentrar com mais detalhes no mesmo.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Primeiro vamos dar uma olhada geral no que o arquivo de configuração contém:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaTn_wXTwdHLQWzRWDoXbM15h3N3syE4cds_so6Fp7vK3nwOiYLd2L-55NCNxj2FrVYuRgQmxlmu1vVDcxZOCGN-4BMJZT0gW0uK9TE5DBA7xqQMWf_QOjCNwjV_6-ONrna6zuRRNqeOutOHdkzb57EL43stJVeIZLhsnYXWMcNTWE9tOpkbdcBk3oDwM/s1341/2025-07-14_12-12-10.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;843&quot; data-original-width=&quot;1341&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaTn_wXTwdHLQWzRWDoXbM15h3N3syE4cds_so6Fp7vK3nwOiYLd2L-55NCNxj2FrVYuRgQmxlmu1vVDcxZOCGN-4BMJZT0gW0uK9TE5DBA7xqQMWf_QOjCNwjV_6-ONrna6zuRRNqeOutOHdkzb57EL43stJVeIZLhsnYXWMcNTWE9tOpkbdcBk3oDwM/s16000/2025-07-14_12-12-10.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Agora, vamos analisar cada ponto:&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;1. Definições Globais&lt;/span&gt;&lt;/h4&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Variáveis que usaremos em toda a Lógica de Roteamento, que podem se referir a parâmetros de LOG, Endereços IP e Portas nas quais o servidor esturatá (LISTEN) entre outros. Tem o seguinte formato:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2BT53r6jF38L7ndWSzuUBzvL2KwAq2N0AsMyGP5PN79unwgJ5RglUnCmOUuepZdz2LidTbhjsqehZ4uxf28nspMk_AXBIf-pGARBemM3erldftw8DFO-T92gq18uCTVpf0vTOQEAi024sXrJXvWZo2mZ5Oxbw51Xcxh-z_UY98OrNUxAOtRQB3CzpytY/s584/2025-07-14_12-12-11.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;497&quot; data-original-width=&quot;584&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2BT53r6jF38L7ndWSzuUBzvL2KwAq2N0AsMyGP5PN79unwgJ5RglUnCmOUuepZdz2LidTbhjsqehZ4uxf28nspMk_AXBIf-pGARBemM3erldftw8DFO-T92gq18uCTVpf0vTOQEAi024sXrJXvWZo2mZ5Oxbw51Xcxh-z_UY98OrNUxAOtRQB3CzpytY/s16000/2025-07-14_12-12-11.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;2. Seção de Módulos&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;É aqui que definimos ou carregamos os módulos que estamos usando, por exemplo, o módulo MySQL para salvar registros no Banco De Dados ou o módulo TLS para criptografia de sinais.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Eles têm o seguinte formato:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKlpultJocKUm4pL-9i-X-Ssg8ly-Zam-XwNgtNCSa3R_k04wsvnXmLXbOpsdlaoxjw69LqXOD9ewpKJwa6DB872x0DeGKWWAKvoPUTxGMpcgVRwMCYc6ETPZTKdKs0keFF9hi9UCwCzIoAwaYI_aEGfHetFrokpuMNlzgSNZOBzsqq464oo9Mt1aGY6s/s576/2025-07-14_12-12-12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;487&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKlpultJocKUm4pL-9i-X-Ssg8ly-Zam-XwNgtNCSa3R_k04wsvnXmLXbOpsdlaoxjw69LqXOD9ewpKJwa6DB872x0DeGKWWAKvoPUTxGMpcgVRwMCYc6ETPZTKdKs0keFF9hi9UCwCzIoAwaYI_aEGfHetFrokpuMNlzgSNZOBzsqq464oo9Mt1aGY6s/s16000/2025-07-14_12-12-12.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;3. Seção de Configuração de Módulos&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Nesta seção, parametrizamos ou configuramos os módulos que carregamos na seção anterior. É muito importante configurá-los adequadamente, pois, em alguns casos, eles são ativados com configurações padrão, o que pode produzir efeitos estranhos no comportamento ao longo da vida útill do servidor SIP.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Eles têm o seguinte formato:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhWhxXu1B_t-qxByvtpmFTjroJJbEJpfS3TQWSZFeWikxCJwKsjZkaK5Ahut9t3wn_lip5PUv12BQpUnxuo3I_BmktrV0afpq17qBDEsMo9fbC_hlnLv4QWKssuUW2niFxWB9TD7giu6b13FEhnTSSMLKKEgj5sRnWpL9fOP9aPhhsPkSS1ikN-mg4U-I/s584/2025-07-14_12-12-13.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;466&quot; data-original-width=&quot;584&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhWhxXu1B_t-qxByvtpmFTjroJJbEJpfS3TQWSZFeWikxCJwKsjZkaK5Ahut9t3wn_lip5PUv12BQpUnxuo3I_BmktrV0afpq17qBDEsMo9fbC_hlnLv4QWKssuUW2niFxWB9TD7giu6b13FEhnTSSMLKKEgj5sRnWpL9fOP9aPhhsPkSS1ikN-mg4U-I/s16000/2025-07-14_12-12-13.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;4. Blocos de Rota ou Lógica de Roteamento&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Está é a seção chave do arquivo de configuração, pois estabelece todo o caminho que as solicitações SIP que recebemos seguirão. Vale ressaltar que não existe um padrão único aqui, pois você pode tornar sua lógica tão simples ou complexa quanto desejar, ou seja, com mais ou menos blocos de rota. No entanto, existem certos padrões que você sempre respeitará ou encontrará em outros arquivos. Estes são os blocos de rota que você normalmente encontrará:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Principal (Main ou request_route).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Secundários (REQINIT, WITHINDLG, REGISTER).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Falhas/Failure (failure_route).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Ramificação/Branch (branch_route).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Este é um diagrama que tenho como padrão para meus projetos, é um esquema de roteamento, pouco complexo, objetivo e prático:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlw-aHqwJP70hjDinKv-wd2nYUvMTmwh2OsPsY8cgYONH02yL2sw72jI-vlscCZ6jO1LCz1_UZUIjQjcY5X_HmDGrFSo68wSe8P3v0B6gwwXd_KGVlKFbWtYErdpkYi12xotOqXGGZ4WKapklvrzQwplh1MrMcjm4xLZ4swGiAKqNHdXsxtDNl7Foxk1s/s1600/2025-07-14_13-00-05.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlw-aHqwJP70hjDinKv-wd2nYUvMTmwh2OsPsY8cgYONH02yL2sw72jI-vlscCZ6jO1LCz1_UZUIjQjcY5X_HmDGrFSo68wSe8P3v0B6gwwXd_KGVlKFbWtYErdpkYi12xotOqXGGZ4WKapklvrzQwplh1MrMcjm4xLZ4swGiAKqNHdXsxtDNl7Foxk1s/s16000/2025-07-14_13-00-05.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Como você pode ver, tudo começa no bloco PRINCIPAL ou REQUEST_ROUTE&amp;nbsp; e flui para os outros blocos, cada um com uma finalidade específica para a solicitação SIP recebida.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O bloco REQINIT desempenha um papel muito importante, pois realiza a maioria das verificações de PRÉ-REQUISITOS, como avaliações de segurança, entre outras necessidades de cada cenário.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Em seguida, os métodos secundários registram, localizam e encaminham as solicitações SIP para outro servidor, como o Asteirsk conforme apropriado.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Fontes:&lt;/span&gt;&lt;/h4&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;URL:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;a href=&quot;https://kamailio.org/docs/modules/6.0.x/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://kamailio.org/docs/modules/6.0.x/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;URL:&amp;nbsp;&lt;a href=&quot;https://www.kamailio.org/wiki/tutorials/getting-started/main&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.kamailio.org/wiki/tutorials/getting-started/main&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Bom, espero que este post amplie sua compreensão de como o Kamailio funciona. Conforme vou conseguindo tempo (para escrever, rsrsr), iremos nos aprofundar em outros aspectos deste software formidável.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Por hoje é só pessoal!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/4667283449631980662/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/4667283449631980662' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4667283449631980662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4667283449631980662'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2025/07/kamailio-entendendo-logica-de-roteamento.html' title='Kamailio - Entendendo a lógica de roteamento.'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4EdCkdb1ev8BL6kibF9dQdIPCBglaKed7khzEDNrtDnGm7gdW5o-mbMttMBpG-XJjeP3rDNUeo8kVISWlkWDfiNp6qz0dPS-Hq0pP4LgWc_82Vf94-2AHSlhZz-MHTx7B153TPh3L0o8DL9SbJ9Bt9m87Q7P1zlMWLlUKwVTJOPJ-caxijsAkxXSRLfQ/s72-c/kamailio_banner.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-3648831955423425068</id><published>2025-06-09T05:01:00.005-10:00</published><updated>2025-06-09T05:05:08.959-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="VoIP Peering"/><title type='text'>Peering: Interconectando a Indústria de VoIP</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2yvMBKdvbwPZHjF6UToWwYGNBvnYU7riEOdD2q7NVTTN4edgO86qQZSRUMLT2NSIcoiOHzvnewx2fSU4-6hrKAyhcqKlxNDZ-t4Yu7QAzdzt1QSDkJYBoKScDPn0uoOvUYtvHfiAOS9nO3T-rfU_9W9bm10Y0KUbH6_tVhn2ZCH8ODrXQ4QdECvM1CkI/s1536/baixados.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2yvMBKdvbwPZHjF6UToWwYGNBvnYU7riEOdD2q7NVTTN4edgO86qQZSRUMLT2NSIcoiOHzvnewx2fSU4-6hrKAyhcqKlxNDZ-t4Yu7QAzdzt1QSDkJYBoKScDPn0uoOvUYtvHfiAOS9nO3T-rfU_9W9bm10Y0KUbH6_tVhn2ZCH8ODrXQ4QdECvM1CkI/s16000/baixados.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&quot;Imagem gerada por IA usando Microsoft Copilot&quot;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;À medida que o setor de &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;VoIP&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; continua a evoluir e amadurecer, começamos a ver um grande número de provedores &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;ITSP&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; (Internet Telephony Service Provider) fazendo &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; entre si. Neste post, falaremos um pouco sobre o que é &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; e por que estamos vendo um movimento em direção ao &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;. Vamos começar fornecendo um pouco de contexto sobre o que é &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;. O peering é um acordo entre duas ou mais redes (ITSP) para &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; ou &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;interconexão física&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; com o objetivo de &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;trocar tráfego&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; entre os &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;usuários de cada rede&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;. O &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; envolve a união de duas redes para um benefício mútuo, que normalmente é a redução ou eliminação dos custos dos serviços. Existem duas &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;interconexões físicas&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; para &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;: &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;peering público&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; e &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;peering privado&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;(com objetivo de dar mais segurança entre Matriz e Filiais). Uma interconexão de &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering público&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; utiliza uma rede compartilhada multipartidária, como um switch Ethernet. Já uma interconexão de &lt;/span&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;peering privado&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; utiliza um link ponto a ponto ou direto entre duas partes.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Então, &lt;b&gt;por que o setor de VoIP&lt;/b&gt;, mais especificamente as ITSPs no atacado e grandes provedores de serviços de varejo, está fazendo &lt;b&gt;peering&lt;/b&gt; com mais frequência? Há alguns motivos: &lt;b&gt;melhor qualidade e economia de custos&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Vamos analisar como as chamadas são tratadas. Uma ITSP atacadista compra serviços de uma &lt;b&gt;ULC&lt;/b&gt; (under lying carrier) ou de uma rede terceirizada para que possam ser revendidos. O peering entre operadoras no Brasil geralmente ocorre por meio de IXPs (Internet Exchange Points) ou acordos diretos entre as partes, sem nenhum registro obrigatório. Para garantir a interoperabilidade e aqualidade do serviço, as operadoras podem estabelecer acordos bilaterais ou multilaterais, mas isso não parece ser rugulado pela &lt;b&gt;ABR Telecom&lt;/b&gt; da mesma forma que o NPAC nos EUA.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Uma&amp;nbsp;&lt;b&gt;ULC&amp;nbsp;&lt;/b&gt;(Underlying Carrier) é uma operadora de telecomunicações que fornece infraestrutura e serviços de rede para outras empresas, sem necessariamente atender diretamente os consumidores finais. Essas operadoras atuam nos bastidores, oferecendo conectividade, terminação de chamadas e outros serviços essenciais para provedores de VoIP e Telecomunicações.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;No Brasil, um equivalente funcional às ULCs seria as &lt;b&gt;operadoras de backbone&lt;/b&gt; e &lt;b&gt;carrier globais&lt;/b&gt;, como &lt;a href=&quot;https://tiinside.com.br/20/10/2024/deutsche-telekom-amplia-operacao-no-brasil-com-lancamento-da-telekom-global-carrier/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Telekom Global Carrier&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;, que oferecem infraestrutura de conectividade para outras empresas de telecomunicações. Além disso, grandes operadoras como Embratel, TIM, VIVO e Claro também desempenham papéis semelhantes ao fornecer serviços de interconexão e transporte de tráfego para provedores menores (ITSPs).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Nota Importante: A ABR Telecom é a entidade responsável pela administração da portabilidade numérica no país, garantindo que os usuários possam trocar de operadora sem perder seus números de telefone.&amp;nbsp; Ela opera como uma entidade neutra, gerenciando o bando de dados central que coordena as solicitações de portabilidade entre as oeperadoras de telefonia fixa e móvel. Desde a implementação da portabilidade numérica no Brasil, a ABR Telecom tem desempenhado um papel fundamental na modernização do setor de telecomunicações.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O principal objetivo da ULC para a ITSP (aqui no Brasil, tamém chamado de Provedor de VoIP) é &lt;b&gt;fazer a transição de chamadas IP mutuamente para a PSTN&lt;/b&gt; (rede telefônica pública comutada), bem como passar chamadas IP para IP.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Bem, e quanto às chamadas que não precisam ser enviadas para a PSTN? Elas precisam ser enviadas para a ULC? &lt;b&gt;A resposta é não&lt;/b&gt;, não com uma estrutura de &lt;b&gt;peering em vigor&lt;/b&gt;. Essas chamadas podem ser passadas diretamente entre as ITSPs (os Provedores de VoIP), eliminando a necessidade de passar chamadas para a ULC. &lt;b&gt;Sem peering&lt;/b&gt;, as ITSPs dependem das ULCs para atuar como um hub central para passar o tráfego de um provedor para outro. À medida que o &lt;b&gt;peering&lt;/b&gt; aumenta, estamos vendo cada vez mais interconexões diretas entre as ITSPs e, em última análise, menos necessidade de intermediários.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh76cQrQv-OYhu5q2pdCScJmIMBfxL1n1mXkoqeIBnpurvBRLHY4g7R5JAGko2KcQLDCZzenUkOunxw_spxMOj_07aQvW4Jin10oRdFlSRPUdvapkvElqEuzNxkfFgveN_dHNB_6pZQuKq-ghoCjOU7NFY8G2ENVB5gMLYwhnfs1WwkpDbNcdO6w194sKg/s1536/Copilot_20250609_114243.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh76cQrQv-OYhu5q2pdCScJmIMBfxL1n1mXkoqeIBnpurvBRLHY4g7R5JAGko2KcQLDCZzenUkOunxw_spxMOj_07aQvW4Jin10oRdFlSRPUdvapkvElqEuzNxkfFgveN_dHNB_6pZQuKq-ghoCjOU7NFY8G2ENVB5gMLYwhnfs1WwkpDbNcdO6w194sKg/s16000/Copilot_20250609_114243.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&quot;Imagem gerada por IA usando Microsoft Copilot&quot;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Isso significa que ITSP com grandes redes de usuários que fazem &lt;b&gt;peering&lt;/b&gt; com outras grandes redes podem transferir chamadas diretamente entre si, reduzindo custos e aumentando a qualidade para o usuário final. Isso pode ser uma &lt;b&gt;tremenda vantagem competitiva&lt;/b&gt; para ITSP que optam pela &lt;b&gt;interconexão&lt;/b&gt;!&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Os &lt;b&gt;benefícios do peering&lt;/b&gt; vão muito além da simples redução de custos. Os usuários finais se beneficiarão das interconexões formadas durante o processo de &lt;b&gt;peering&lt;/b&gt;. Como resultado do &lt;b&gt;peering&lt;/b&gt;, os usuários finais verão uma mudança &lt;b&gt;perceptível na qualidade de seus serviços&lt;/b&gt;. Como o intermediário é eliminado, há menos saltos de switch, redução do PDD (atraso pós-discagem), redução da degradação do serviço e menor chance de falha do equipamento.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Não é de se admirar que o &lt;b&gt;peering&lt;/b&gt; esteja crescendo em popularidade; os clientes estão obtendo uma melhor qualidade de serviço e é isso que qualquer bom ITSP se esforça para fazer. À medida que mais ITSPs interconectam suas infraestruturas por meio de &lt;b&gt;parcerias de peering&lt;/b&gt; e mais usuários adotam o serviço de Telefonia sobre IP (ToIP) e Voz sobre IP (VoIP), a necessidade de depender de ULCs diminuirá. Isso deixará uma rede VoIP interconectada de propriedade e operada por um grande número de ITSPs menores, em vez de algumas entidades governamentais e grandes empresas.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Mas por onde começar? Eu recomendo iniciar pela &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc6405&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;RFC6405&lt;/b&gt;&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Que plataforma utilizar? Eu recomendo iniciar pelo projeto 100% Open Source &lt;a href=&quot;https://irontec.github.io/ivozprovider/en/index.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;I::VOZ PROVIDER&lt;/b&gt;&lt;/a&gt; da Irontec.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Inclusive tem um grupo de estudos com varios profissionais de ITSPs do Brasil no &lt;a href=&quot;https://t.me/+M-99kZJk0VdiNTAx&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Telegram&lt;/b&gt;&lt;/a&gt; dedicado ao I::VOZ PROVIDER.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Recomendo, ler o artigo do Sr. Álvaro Marques: &quot;VoIP Peering: O próximo Passo da Interconexão&quot; disponivel no site da &lt;a href=&quot;https://www.teleco.com.br/tutoriais/tutorialvoippeering/default.asp&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Teleco&lt;/b&gt;&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; text-align: left;&quot;&gt;&quot;&lt;b&gt;Nada nos para, o que é que há velhinho?!&lt;/b&gt;&quot; (Pernalonga - Bugs Bunny, 85 anos, criado por Tex Avery).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/3648831955423425068/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/3648831955423425068' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/3648831955423425068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/3648831955423425068'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2025/06/peering-interconectando-industria-de.html' title='Peering: Interconectando a Indústria de VoIP'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2yvMBKdvbwPZHjF6UToWwYGNBvnYU7riEOdD2q7NVTTN4edgO86qQZSRUMLT2NSIcoiOHzvnewx2fSU4-6hrKAyhcqKlxNDZ-t4Yu7QAzdzt1QSDkJYBoKScDPn0uoOvUYtvHfiAOS9nO3T-rfU_9W9bm10Y0KUbH6_tVhn2ZCH8ODrXQ4QdECvM1CkI/s72-c/baixados.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-8650967408213233728</id><published>2025-04-09T06:14:00.003-10:00</published><updated>2025-04-09T06:14:31.808-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Evitando Spoofing no Asterisk® SCF™</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbAqpXr5-3w288d0YcaOF5uof2WsLavcU47crX6VXCcDq5iqtRa7MBUahPE1_3Q3YpqQiW3CL3uMVLAbTzIpUin7PE3g14-3mw1_iJo3GhaKlpS3mbWPvwT36kjTcG8GGXuBhRM1o2Cb7heHm3YO0LUMtzYxndbIiZ76u7KH2ve9LTUY8cEHc3T6QYAg/s1000/shutterstock_1035163426.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;550&quot; data-original-width=&quot;1000&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbAqpXr5-3w288d0YcaOF5uof2WsLavcU47crX6VXCcDq5iqtRa7MBUahPE1_3Q3YpqQiW3CL3uMVLAbTzIpUin7PE3g14-3mw1_iJo3GhaKlpS3mbWPvwT36kjTcG8GGXuBhRM1o2Cb7heHm3YO0LUMtzYxndbIiZ76u7KH2ve9LTUY8cEHc3T6QYAg/s16000/shutterstock_1035163426.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp; &amp;nbsp; Imagen extraita do site:&amp;nbsp;&lt;a href=&quot;https://www.tripwire.com/state-of-security/caller-id-spoofing&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.tripwire.com/state-of-security/caller-id-spoofing&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O uso malicioso do CALLERID(name)&amp;lt;number&amp;gt; pode ser uma forma de spoofing, onde o atacante tenta enganar o sistema ou usuários ao passar um número falso — como delphini&amp;lt;1234&amp;gt;. Isso pode ser usado para:&lt;/div&gt; &lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;Burlar regras de acesso;&lt;/li&gt;&lt;li&gt;Fazer chamadas fraudulentas;&lt;/li&gt;&lt;li&gt;Injetar comandos em logs, bancos de dados ou URAs, se não houver tratamento adequado.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Como evitar ataques via CALLERID(number) no Asterisk&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;1. Sanitizar o CALLERID no dialplan&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Você pode limpar o número, mantendo apenas dígitos:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,1,Set(CALLERID(num)=${FILTER(0-9,${CALLERID(num)})})&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Ou, para armazenar em variável segura:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,1,Set(SAFE_CALLERID=${FILTER(0-9,${CALLERID(num)})})&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Assim, qualquer caractere estranho (letras, símbolos, espaços, etc) será removido.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;2. Verificar padrões válidos antes de usar&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,n,GotoIf($[&quot;${CALLERID(num)}&quot; :!^ [0-9]+$] ?hangup,s,1)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Isso envia para um contexto de hangup se o número tiver algo além de dígitos.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;3. Bloquear chamadas com CALLERID suspeito&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Você pode negar chamadas que tenham nomes/números suspeitos:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,1,ExecIf($[&quot;${CALLERID(name)}&quot; = &quot;delphini&quot;]?Hangup())&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,n,ExecIf($[&quot;${CALLERID(num)}&quot; = &quot;1234&quot;]?Hangup())&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Ou usar expressões mais robustas com ${REGEX(...)}.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;4. Forçar um novo CALLERID confiável&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Se você sabe que as chamadas vêm de uma operadora confiável, pode substituir o CallerID:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,1,Set(CALLERID(num)=0123456789)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,n,Set(CALLERID(name)=EmpresaX)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;5. No sip.conf ou pjsip.conf: Controlar permissões&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;SIP (chan_sip):&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;[ataque]&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;callerid=unknown&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;trustrpid=no&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;sendrpid=no&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;PJSIP (chan_pjsip):&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;[ataque]&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;trust_id_inbound=no&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;send_pai=no&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;send_rpid=no&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Esses parâmetros evitam que o Asterisk confie no CALLERID vindo do peer.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;6. Logs e proteção contra injeções&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Nunca jogue o CALLERID(num) diretamente em banco de dados, logs ou AGI sem limpar. Exemplo:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;exten =&amp;gt; _X.,n,Set(SAFE_CID=${FILTER(0-9,${CALLERID(num)})})&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;7. iptables / fail2ban para SIP&lt;/div&gt; &lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Monitore tentativas suspeitas com fail2ban (regex em /var/log/asterisk/messages).&lt;/div&gt; &lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Pode criar regras para bloquear IPs que tentam registrar ou enviar chamadas com CALLERID inválido.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Segue um&amp;nbsp;Validador de Chamadas Suspeitas por CallerID (Python)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;strong data-end=&quot;70&quot; data-start=&quot;42&quot;&gt;Bloquear IPs no IPTABLES&lt;/strong&gt; (associados ao CallerID suspeito).&lt;/li&gt;&lt;li&gt;&lt;strong data-end=&quot;159&quot; data-start=&quot;109&quot;&gt;Gravar os eventos em um banco de dados MariaDB&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h3 class=&quot;&quot; data-end=&quot;380&quot; data-start=&quot;359&quot;&gt;Pré-requisitos&lt;/h3&gt;
&lt;ul data-end=&quot;514&quot; data-start=&quot;382&quot;&gt;
&lt;li class=&quot;&quot; data-end=&quot;477&quot; data-start=&quot;382&quot;&gt;
&lt;p class=&quot;&quot; data-end=&quot;391&quot; data-start=&quot;384&quot;&gt;Python:&lt;/p&gt;
&lt;ul data-end=&quot;477&quot; data-start=&quot;394&quot;&gt;
&lt;li class=&quot;&quot; data-end=&quot;434&quot; data-start=&quot;394&quot;&gt;
&lt;p class=&quot;&quot; data-end=&quot;434&quot; data-start=&quot;396&quot;&gt;&lt;code data-end=&quot;404&quot; data-start=&quot;396&quot;&gt;pyodbc&lt;/code&gt; (ou &lt;code data-end=&quot;433&quot; data-start=&quot;409&quot;&gt;mysql-connector-python&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li class=&quot;&quot; data-end=&quot;477&quot; data-start=&quot;437&quot;&gt;
&lt;p class=&quot;&quot; data-end=&quot;477&quot; data-start=&quot;439&quot;&gt;Acesso &lt;code data-end=&quot;452&quot; data-start=&quot;446&quot;&gt;sudo&lt;/code&gt; (para executar iptables)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;&quot; data-end=&quot;514&quot; data-start=&quot;478&quot;&gt;
&lt;p class=&quot;&quot; data-end=&quot;514&quot; data-start=&quot;480&quot;&gt;Banco de dados MariaDB com tabela:&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;CREATE TABLE chamadas_suspeitas (&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; id INT AUTO_INCREMENT PRIMARY KEY,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; callerid VARCHAR(50),&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; ip VARCHAR(50),&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; datahora DATETIME,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; motivo VARCHAR(255)&lt;/div&gt;&lt;div&gt;);&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Código Python&lt;/h3&gt;&lt;div&gt;&lt;div&gt;import re&lt;/div&gt;&lt;div&gt;import logging&lt;/div&gt;&lt;div&gt;import subprocess&lt;/div&gt;&lt;div&gt;import mysql.connector&lt;/div&gt;&lt;div&gt;from datetime import datetime&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# Configurações&lt;/div&gt;&lt;div&gt;DB_CONFIG = {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &#39;host&#39;: &#39;localhost&#39;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &#39;user&#39;: &#39;usuario&#39;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &#39;password&#39;: &#39;senha&#39;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &#39;database&#39;: &#39;seu_banco&#39;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PATTERNS_SUSPEITOS = [&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; r&#39;^00\d{6,}&#39;, r&#39;^1\d{2,}$&#39;, r&#39;^\d{10,}$&#39;, r&#39;^[*#]\d+&#39;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; r&#39;^(.)\1{5,}$&#39;, r&#39;^(1234|1111|0000)$&#39;, r&#39;^anonymous$&#39;, r&#39;^restricted$&#39;, r&#39;^$&#39;,&lt;/div&gt;&lt;div&gt;]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def eh_callerid_suspeito(callerid):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; callerid = callerid.strip().lower()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for padrao in PATTERNS_SUSPEITOS:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if re.match(padrao, callerid):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return padrao&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; return None&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def bloquear_ip(ip):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; try:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subprocess.run([&#39;sudo&#39;, &#39;iptables&#39;, &#39;-A&#39;, &#39;INPUT&#39;, &#39;-s&#39;, ip, &#39;-j&#39;, &#39;DROP&#39;], check=True)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logging.warning(f&quot;IP bloqueado via iptables: {ip}&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; except subprocess.CalledProcessError as e:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logging.error(f&quot;Erro ao bloquear IP: {ip} - {e}&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def registrar_no_banco(callerid, ip, motivo):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; try:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; conn = mysql.connector.connect(**DB_CONFIG)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cursor = conn.cursor()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; query = &quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INSERT INTO chamadas_suspeitas (callerid, ip, datahora, motivo)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VALUES (%s, %s, %s, %s)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; valores = (callerid, ip, datetime.now(), motivo)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cursor.execute(query, valores)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; conn.commit()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cursor.close()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; conn.close()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logging.info(f&quot;Registro salvo no banco: {callerid}, {ip}, motivo: {motivo}&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; except Exception as e:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logging.error(f&quot;Erro ao salvar no banco: {e}&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def processar_chamada(callerid, ip):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; motivo = eh_callerid_suspeito(callerid)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if motivo:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bloquear_ip(ip)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; registrar_no_banco(callerid, ip, motivo)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# Exemplo de chamadas&lt;/div&gt;&lt;div&gt;chamadas = [&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; {&quot;callerid&quot;: &quot;anonymous&quot;, &quot;ip&quot;: &quot;192.168.1.100&quot;},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; {&quot;callerid&quot;: &quot;5511999999999&quot;, &quot;ip&quot;: &quot;192.168.1.101&quot;},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; {&quot;callerid&quot;: &quot;999999&quot;, &quot;ip&quot;: &quot;192.168.1.102&quot;},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; {&quot;callerid&quot;: &quot;normaluser&quot;, &quot;ip&quot;: &quot;192.168.1.103&quot;}&lt;/div&gt;&lt;div&gt;]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;if __name__ == &quot;__main__&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; logging.basicConfig(level=logging.INFO)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for chamada in chamadas:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; processar_chamada(chamada[&quot;callerid&quot;], chamada[&quot;ip&quot;])&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 class=&quot;&quot; data-end=&quot;2849&quot; data-start=&quot;2830&quot;&gt;Dicas finais:&lt;/h3&gt;
&lt;ul data-end=&quot;3159&quot; data-start=&quot;2851&quot;&gt;
&lt;li class=&quot;&quot; data-end=&quot;2987&quot; data-start=&quot;2851&quot;&gt;
&lt;p class=&quot;&quot; data-end=&quot;2931&quot; data-start=&quot;2853&quot;&gt;⚙️ Para o &lt;code data-end=&quot;2869&quot; data-start=&quot;2863&quot;&gt;sudo&lt;/code&gt; funcionar sem senha com &lt;code data-end=&quot;2904&quot; data-start=&quot;2894&quot;&gt;iptables&lt;/code&gt;, edite &lt;code data-end=&quot;2926&quot; data-start=&quot;2912&quot;&gt;/etc/sudoers&lt;/code&gt; com:&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;youruser ALL=NOPASSWD: /sbin/iptables.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/8650967408213233728/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/8650967408213233728' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/8650967408213233728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/8650967408213233728'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2025/04/evitando-spoofing-no-asterisk-scf.html' title='Evitando Spoofing no Asterisk® SCF™'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbAqpXr5-3w288d0YcaOF5uof2WsLavcU47crX6VXCcDq5iqtRa7MBUahPE1_3Q3YpqQiW3CL3uMVLAbTzIpUin7PE3g14-3mw1_iJo3GhaKlpS3mbWPvwT36kjTcG8GGXuBhRM1o2Cb7heHm3YO0LUMtzYxndbIiZ76u7KH2ve9LTUY8cEHc3T6QYAg/s72-c/shutterstock_1035163426.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-2081940076187742673</id><published>2024-05-22T08:35:00.002-10:00</published><updated>2024-05-22T08:35:13.701-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="NAT"/><category scheme="http://www.blogger.com/atom/ns#" term="SIP"/><title type='text'>Problema de SIP e NAT em Intranet.</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnVLy58RjZ0pLvR3crz1dgtlBx6Ye2Tm3D7B1r2Ou38WjpOsfnmX7ZD3CsY_80LEXz2n3Uy2GzFWdAdbthlQoAAWnTaoVIQbqNFmQ1MEi4SNrrjE1kqg8e_n-moKTRE9cwf9uzI0U-VtHDPT9GuV_zAS4dqvyC9rV4aZJ3aAfmYV7TK4H1WmW_unN3kpQ/s640/NAT%20and%20SIP%20for%20Asterisk.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;360&quot; data-original-width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnVLy58RjZ0pLvR3crz1dgtlBx6Ye2Tm3D7B1r2Ou38WjpOsfnmX7ZD3CsY_80LEXz2n3Uy2GzFWdAdbthlQoAAWnTaoVIQbqNFmQ1MEi4SNrrjE1kqg8e_n-moKTRE9cwf9uzI0U-VtHDPT9GuV_zAS4dqvyC9rV4aZJ3aAfmYV7TK4H1WmW_unN3kpQ/s16000/NAT%20and%20SIP%20for%20Asterisk.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;clear: both; text-align: justify;&quot;&gt;Resumo:&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;Session Initiation Protocol (SIP) é o protocolo necessário para iniciar uma sessão de comunicação entre dois terminais. É um protocolo de SOLICITAÇÃO/RESPOSTA escalável e leve e é amplamente utilizado em serviços VoIP. No entento, a questão da passagem no NAT (Network Address Translator) para suportar o SIP em um ambiente de rede privada (Intranet) tem sido um debate contínuo e depende do tipo de NAT. Consequentemente, este post propôs e implementou um Proxy SIP simplificado e um módulo de retransmissão UDP para resolver o problema de passagem NAT para o SIP, especialmente em um ambiente NAT simétrico.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;Para este fim, definimos e implementamos um pacote de biblioteca SIP no topo do Gateway baseado em OSGi e implementamos o módulo de Servidor SIP assim como o modulo de retransmissão UDP na forma de pagote OSGi. O método proposto neste post não requer nenhuma configuração adicional do Agente Usuário (UAS/UAC) SIP.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;clear: both; text-align: justify;&quot;&gt;1. Introdução:&lt;/h3&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;No futuro, as redes evoluirão para um ambiente de rede doméstica devido ao rápido desenvolvimento da Internet e dos dispositivos de informação e ao desejo de conveniência dos clientes . Neste ambiente de rede doméstica, espera-se que uma rede privada utilizando NAT seja estabelecida para cada residência, em vez de atribuir um IP público (Protocolo de Internet) a todos os terminais da residência.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Enquanto isso, a Internet atual está evoluindo gradualmente do tráfego de dados centrado na Web para serviços que exigem tráfego em tempo real, como reuniões remotas e VoIP (voz sobre IP) . Portanto, as futuras redes também deverão ser capazes de fornecer serviços baseados em UDP (User Datagram Protocol), onde o tempo de chegada é mais importante do que a transmissão precisa de dados dependendo do serviço. Atualmente, os protocolos de configuração de chamadas mais comumente usados ​​para serviços de transmissão em tempo real incluem H.323 apresentado pela ITU-T e SIP da Internet Engineering Task Force (IETF).&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Atualmente, a maioria dos fabricantes de equipamentos e empresas de serviços suportam o protocolo H.323, mas espera-se que o protocolo SIP do IETF, que possui muitas funções e escalabilidade, se torne popular no futuro. Em geral, SIP é um padrão definido no documento IETF RFC3261 e é um protocolo de controle de camada de aplicação para estabelecer, modificar e encerrar sessões ou chamadas para comunicação multimídia, como vídeo e voz.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;SIP é um protocolo baseado em cliente-servidor implantado na forma de um originador de chamada chamando a outra parte para participar da sessão. Adicionalmente, a informação de sessão a ser expressa numa sessão para comunicação de serviço multimédia é descrita utilizando SDP (Session Description Protocol). No entanto, num ambiente de rede doméstica com uma rede privada que utiliza NAT, existem restrições à prestação de tais serviços SIP.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Em outras palavras, o processamento de fluxos de mídia RTP utilizando SIP entre UAC (User Agent Client) e UAS (User Agent Server) localizados em uma rede privada varia dependendo do tipo de NAT.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;No caso do Full Cone NAT, ele existe em uma rede pública, pode ser processado configurando Through NAT, mas se for NAT simétrico, não é possível mesmo que exista STUN. Se o NAT da rede doméstica for NAT simétrico, você poderá configurar um servidor TURN (Traversal Using Relay NAT) na rede pública para ativar o processamento RTP. No entanto, neste momento, o TURN tem problemas como desperdício de largura de banda e atraso devido a solicitações de media relay de um grande número de clientes.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Para resolver esse problema, projetamos e implementamos um Proxy SIP simples, voltado para uso doméstico e um pacote de retransmissão UDP. Esses pacotes são montados na estrutura OSGi do gateway doméstico e interagem entre si, ajudando a enviar e receber fluxos de mídia em tempo real com êxito, mesmo no ambiente NAT simétrico, que deverá se tornar o mais comum no futuro.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;2. Problema de passagem de NAT do SIP:&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O NAT converte endereços IP privados e endereços IP públicos. É um dispositivo que permite que vários terminais em uma rede privada salvem endereços IP públicos compartilhando um IP público.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Esses NATs são amplamente classificados em NAT de cone completo, NAT de cone restrito, NAT de cone restrito de porta e NAT simétrico. Do ponto de vista de uma sessão SIP, é importante saber se a sinalização para configuração de chamada e subsequente transmissão de mídia pode passar pelo NAT.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Dependendo do tipo de NAT. Até agora, existem vários métodos para resolver este problema de travessia SIP NAT. Neste momento apresentaremos os principais métodos existentes para resolver este problema, e no próximo bloco do post mostraremos que um dos métodos foi implementado baseado em OSGi.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;2.1. UPnP:&amp;nbsp;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;UPnP, proposto pela Microsoft, tem como objetivo conectar PCs, dispositivos periféricos, dispositivos AV, etc. em casa através de uma rede e funcionar sem operações ou configurações complicadas . UPnP permite que aplicativos clientes descubram e configurem automaticamente componentes de rede, como NAT e firewalls. Para fazer isso, cada dispositivo deve estar equipado com software UPnP. Muitos pequenos fornecedores de NAT estão comprometidos em oferecer suporte à funcionalidade UPnP para aplicativos SIP, mas ainda existem poucos clientes UPnP úteis. O UPnP tem a desvantagem de ser vulnerável à segurança porque depende apenas do pinhole de abertura do NAT para se conectar a uma rede pública externa sob o controle dinâmico do programa cliente.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Portanto, o escopo deste método parece estar limitado a aplicações de pequena escala.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;2.2. STUN (Simple Traversal of UDP through NAT):&amp;nbsp;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;STUN é um método que usa uma sonda NAT chamada servidor STUN. Para estabelecer uma sessão, um cliente equipado com a função STUN envia uma mensagem de consulta ao servidor STUN externo para determinar a porta para receber o fluxo de mídia . O servidor STUN lê esta mensagem e informa ao cliente qual endereço IP público e porta foi utilizado pelo NAT no envio da mensagem, bem como o tipo de NAT.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O endereço IP público e a porta fornecidos pelo servidor STUN são usados ​​na fase de configuração da chamada. No entanto, o servidor STUN não existe no caminho de sinalização e transmissão do fluxo de mídia real.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Portanto, este método não funciona em um ambiente NAT simétrico onde o mapeamento de endereços é formado com base não apenas no endereço de origem e na porta, mas também no endereço e na porta de destino . Em outras palavras, como o endereço do cliente SIP de destino é diferente do endereço do servidor STUN, o NAT formará um novo mapeamento para o cliente SIP, o que novamente significa que as informações incluídas na fase de configuração da chamada perdem o sentido.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Portanto, a tentativa de estabelecer a chamada falha. A desvantagem deste método é que ele requer funcionalidade adicional do cliente SIP para suportar a função STUN. Além disso, o NAT no qual este método opera é vulnerável a ataques de varredura de porta, levantando preocupações de segurança.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;2.3. TURN (Traversal Using Relay NAT):&amp;nbsp;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O TURN foi proposto pela IETF para resolver problemas de travessia de mídia em um ambiente NAT simétrico. Ao contrário do método STUN, o TURN coloca uma sonda NAT chamada servidor TURN no caminho de sinalização e transmissão do fluxo de mídia . Um cliente SIP equipado com a função TURN envia uma mensagem de consulta ao servidor TURN localizado na rede pública. O servidor TURN então responde ao cliente SIP com o endereço IP público e as informações da porta usadas pelo NAT para a mensagem.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Esta informação é útil para configuração de chamadas e transmissão do fluxo de mídia real. Isso ocorre porque o servidor TURN está localizado ao longo do caminho de sinalização e transmissão de mídia.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;No entanto, este método coloca uma grande carga no servidor TURN à medida que o número de clientes SIP aumenta e pode causar atrasos na transmissão devido a solicitações de corretagem de mídia por clientes SIP. Há uma desvantagem.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;2.4. Media Relay:&amp;nbsp;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Este método é semelhante ao TURN no sentido de que ele medeia pacotes de mídia. Entretanto, diferentemente do TURN, os Media Relays têm acesso às mensagens SIP. Normalmente, há um servidor chamado Proxy NAT no caminho da sessão SIP, que modifica a mensagem SDP para permitir que ela passe pelo NAT. Além disso, ele modifica a mensagem SDP para instruir o Proxy NAT a enviar pacotes de mídia através de uma porta específica, em vez de enviar o fluxo de mídia diretamente entre os dois clientes SIP.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Você pode iniciar seus estudos sobre OSGi nesse link: (&lt;a href=&quot;https://pt.wikipedia.org/wiki/OSGi&quot; target=&quot;_blank&quot;&gt;https://pt.wikipedia.org/wiki/OSGi&lt;/a&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Sobre Media Relay, este é um ótimo artigo para iniciar: (&lt;a href=&quot;https://wiki.innovaphone.com/index.php?title=Howto:How_to_use_media-relay_functionality_for_sip-registrations_and_how_to_configure_sip-clients_and_sip-trunk&quot; target=&quot;_blank&quot;&gt;Innovaphone WiKi&lt;/a&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Em relação ao TURN, existe uma excelente explanação no projeto (&lt;a href=&quot;https://debian-handbook.info/browse/pt-BR/stable/sect.rtc-services.html&quot; target=&quot;_blank&quot;&gt;Debian Handbook&lt;/a&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Já sobre o STUN, eu recomendo o Estudo de Caso do Fabricio José Costa e Luis Augusto Mattos Mendes, para o Departamento de Ciência da Computação da Universidade Presidente Antônio Carlos - UNIPAC, Campus Magnus - Barbacena/MG. (&lt;a href=&quot;https://ri.unipac.br/repositorio/wp-content/uploads/2019/07/Fabr%C3%ADcio-Jos%C3%A9-Rodrigues-Costa.pdf&quot; target=&quot;_blank&quot;&gt;Estudo de Caso&lt;/a&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Então, temos o UPnP, que podemos ter uma boa visão no proprio site da Microsoft, (&lt;a href=&quot;https://learn.microsoft.com/pt-br/windows/win32/upnp/overview-of-universal-plug-and-play&quot; target=&quot;_blank&quot;&gt;Visão Geral da Arquitetura UPnP&lt;/a&gt;).&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/2081940076187742673/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/2081940076187742673' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/2081940076187742673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/2081940076187742673'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2024/05/problema-de-sip-e-nat-em-intranet.html' title='Problema de SIP e NAT em Intranet.'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnVLy58RjZ0pLvR3crz1dgtlBx6Ye2Tm3D7B1r2Ou38WjpOsfnmX7ZD3CsY_80LEXz2n3Uy2GzFWdAdbthlQoAAWnTaoVIQbqNFmQ1MEi4SNrrjE1kqg8e_n-moKTRE9cwf9uzI0U-VtHDPT9GuV_zAS4dqvyC9rV4aZJ3aAfmYV7TK4H1WmW_unN3kpQ/s72-c/NAT%20and%20SIP%20for%20Asterisk.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-7902214687017753762</id><published>2023-12-20T05:30:00.002-10:00</published><updated>2023-12-20T05:30:47.091-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Desenvolvimento de Aplicações VoIP com Asterisk® SCF™</title><content type='html'>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7PaiGzViOFLO8qogYMqtS7XcMiWLoKcLRFzu8LpMas8ALxkdIATO63Yt5wZPjVgLpi9WeXVW4s_HFCYjCpw2N9EZH1XdRGkI90lT11uJOrGtfzFl9wHfkmShuHlyq-hmzktNTzF-Yag2vP0mO41joQKmqRdmmssBjbvqBYxoornstjGSNsAQFRxOJijE/s1024/voip_pbx.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7PaiGzViOFLO8qogYMqtS7XcMiWLoKcLRFzu8LpMas8ALxkdIATO63Yt5wZPjVgLpi9WeXVW4s_HFCYjCpw2N9EZH1XdRGkI90lT11uJOrGtfzFl9wHfkmShuHlyq-hmzktNTzF-Yag2vP0mO41joQKmqRdmmssBjbvqBYxoornstjGSNsAQFRxOJijE/s16000/voip_pbx.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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...&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; e WebRTC&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Asterisk® SCF™&lt;/b&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;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.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Requer conhecimentos básicos que &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;não são básicos&lt;/span&gt;&lt;/b&gt; para quem é leigo na área e não sabe como funcionam protocolos, codecs, dialplan, etc. para configurá-lo de forma minimamente decente.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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 é &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™, e sim são soluções embarcadas em &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Dito isto, o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; 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!&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;(Asterisk Scalable Communications Framework).&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Graças a isso, o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; 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. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Já falamos sem parar sobre as &quot;interfaces&quot; que o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; possui:&lt;/span&gt;&lt;/div&gt; &lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;CLI (Command Line Interface)&lt;/b&gt;, que é a forma mais básica de acessar o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; a partir do terminal do console e nos permite executar comandos simplesmente digitando o que queremos.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;AGI (Asterisk Gateway Interface)&lt;/b&gt;, uma pseudo linguagem que nos permite externalizar ações executadas a partir do próprio&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;. 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 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;não possui suporte. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;AMI (Asterisk Manager Interface)&lt;/b&gt;, uma porta TCP à qual podemos nos conectar para enviar comandos e receber eventos sobre tudo o que acontece no&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;, graças a um protocolo muito simples para quem sabe programar.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;ARI (Asterisk REST Interface)&lt;/b&gt;, uma interface REST que permite que tanto o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; 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.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Estas são as interfaces que o&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; 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.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Um ótimo livro que recomendo para&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™, é &lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.amazon.com.br/Guia-Configuracao-Para-Asterisk-Pbx/dp/1499576854&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Guia de Configuracao Para O Asterisk Pbx: Como Construir Um Pabx Com Software Livre&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;, do Flavio E. Goncalves.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;a-size-extra-large celwidget&quot; data-cel-widget=&quot;productTitle&quot; data-csa-c-id=&quot;d8ojzm-htz5pw-o4lze9-ozboti&quot; id=&quot;productTitle&quot; style=&quot;box-sizing: border-box; line-height: 36px !important; text-rendering: optimizelegibility;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Kamailio®&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Porém, existem necessidades e projetos para os quais o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; não é a ferramenta ideal. O&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; sempre pode ajudar, mas chega um momento em que é preciso olhar mais longe e ver que outras soluções podem ser utilizadas.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Para dar um exemplo rápido e fácil de entender, podemos dar uma olhada no projeto &lt;a href=&quot;https://github.com/sipcapture/homer/tree/homer5&quot; target=&quot;_blank&quot;&gt;HOMER&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;HOMER&lt;/b&gt; é 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?&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;? Poderia... mas neste caso, um &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;lidando com um grande volume de chamadas SIP poderia exigir grandes recursos, então a solução que escolheram para a versão &lt;b&gt;HOMER 5&lt;/b&gt; foi: &lt;a href=&quot;https://www.kamailio.org/w/&quot; target=&quot;_blank&quot;&gt;Kamailio&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.kamailio.org/w/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;https://www.kamailio.org/w/&quot; target=&quot;_blank&quot;&gt;&lt;/a&gt;. &lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Kamailio®&lt;/b&gt; é 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&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;pacote&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; SIP que chega. Por esse motivo, o&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Kamailio®&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; é uma ferramenta supereficiente de processamento de pacotes SIP e a ferramenta selecionada pelo &lt;b&gt;HOMER 5&lt;/b&gt; para esta tarefa.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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. &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Então para ficar fera em Kamailio, recomendo o livro  Daniel-Constantin Mierla e Elena-Ramona Modroiu, da &lt;a href=&quot;https://www.asipto.com/sw/&quot; target=&quot;_blank&quot;&gt;ASIPTO&lt;/a&gt;. &lt;a href=&quot;https://www.asipto.com/index.php/kamailio-admin-book/&quot; target=&quot;_blank&quot;&gt;Kamailio Admin Book - SIP Routing with Kamailio&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;WebRTC®&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;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 &lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Embora tenhamos falado longamente sobre&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;, você precisa saber o que é para compreender totalmente seu escopo.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; é normalmente associado a vários termos: Modern Web Browser e/ou Web Softphone.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; é muito mais que isso... embora pareça uma descrição da Wikipédia,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt; é uma biblioteca de ferramentas que nos permitirá desenvolver todo tipo de aplicações que envolvam qualquer tipo de &quot;mídia&quot; em tempo real (que pode ser áudio , vídeo ou também texto, arquivos, captura de tela, etc.) usando um navegador da web.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Porém, o&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; 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 &lt;b&gt;WebSockets&lt;/b&gt;, o que nos permite interagir com qualquer aplicação remota que possa se conectar via &lt;b&gt;WebSocket&lt;/b&gt;, o que elimina a necessidade de usa-lo &quot;entre&quot; navegadores da web e abre possibilidades com praticamente qualquer outro dispositivo, desde ferramentas IoT, robôs, automação residencial, segurança e muito mais.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Portanto, e embora tenha consciência de que a curva de aprendizagem do&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; 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.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span&gt;Um site que recomendo se quer aprender sobre &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;® &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;é o da &lt;a href=&quot;https://telecom.altanai.com/webrtc/&quot; target=&quot;_blank&quot;&gt;ALTANAI&lt;/a&gt;. Altanai Bisht é Mestre em Ciencia da Computação e é Doutora em Telecomunicações. Ela escreveu um livro sobre &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&lt;b&gt;WebRTC&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;®, &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;super recomendo.&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;https://www.packtpub.com/product/webrtc-integrators-guide/9781783981267&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O livro é WebRTC Integrato&#39;s Guide pela &amp;lt;packt&amp;gt;.&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Fonte:&amp;nbsp; &lt;a href=&quot;https://www.sinologic.net&quot; target=&quot;_blank&quot;&gt;Sinologic&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: medium;&quot;&gt;Adaptação: Angelo Delphini.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/7902214687017753762/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/7902214687017753762' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/7902214687017753762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/7902214687017753762'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/12/desenvolvimento-de-aplicacoes-voip-com.html' title='Desenvolvimento de Aplicações VoIP com Asterisk® SCF™'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7PaiGzViOFLO8qogYMqtS7XcMiWLoKcLRFzu8LpMas8ALxkdIATO63Yt5wZPjVgLpi9WeXVW4s_HFCYjCpw2N9EZH1XdRGkI90lT11uJOrGtfzFl9wHfkmShuHlyq-hmzktNTzF-Yag2vP0mO41joQKmqRdmmssBjbvqBYxoornstjGSNsAQFRxOJijE/s72-c/voip_pbx.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-7360097120022758836</id><published>2023-12-18T04:43:00.002-10:00</published><updated>2023-12-18T04:50:42.763-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AEAP"/><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>AEAP: O protocolo de aplicativos externos do Asterisk® SCF™</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiogQJwbcfq6PN6zKVyQifCuwMFYKGuMzFF0EU4KU38uw7Dv9sz34-ON0QCtwA0vkC4SdVAkPlA0BFYxwnxRFszRcnCLSotWwRu6fisFMOinHTit_LkWjIu-rBWUHxxVumUbNPDuU4YTsWBIEXxmwh-jqOhVIp_Feuiz0z4oBP9IMQtqLQ5JA9jDpSHsDg/s1024/AEAP.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiogQJwbcfq6PN6zKVyQifCuwMFYKGuMzFF0EU4KU38uw7Dv9sz34-ON0QCtwA0vkC4SdVAkPlA0BFYxwnxRFszRcnCLSotWwRu6fisFMOinHTit_LkWjIu-rBWUHxxVumUbNPDuU4YTsWBIEXxmwh-jqOhVIp_Feuiz0z4oBP9IMQtqLQ5JA9jDpSHsDg/s16000/AEAP.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;A equipe de desenvolvimento do &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; acaba de anunciar que você está listado no &lt;b&gt;AEAP&lt;/b&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;Asterisk External Application Protocol&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;), 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&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;e Asterisk® SCF™ 19.4.0 e que nos permitirá conectar com aplicativos externos para enviar áudio e dados e obter resultados sobre eles.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Um exemplo básico que é usado como demonstração para entender como funciona o &lt;b&gt;AEAP&lt;/b&gt; é 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&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;próprio conector graças a este protocolo.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;O protocolo &lt;b&gt;AEAP&lt;/b&gt; nos permite criar um “subsistema” para criar aplicações nativas Asterisk® SCF™ que receberão dados de entrada e gerarão dados de resposta.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Para fazer esses &quot;subsistemas&quot; você tem que saber como funciona a arquitetura Asterisk® SCF™ e utilizar os módulos &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;res_aeap.h&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; e &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;res_aeap_message.h&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; de onde geraremos um novo &quot;motor&quot; para o qual poderemos enviar os dados e que retornará o resultado que ele retorna para nós.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;-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;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;-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;&quot;&gt;Como exemplo de uso, eles criaram um &quot;subsistema para fazer reconhecimento de fala para texto&quot; e o incorporaram ao Asterisk® SCF™ no módulo &lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt;&lt;b&gt;res_speech_aeap.c&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt;, que irá gerar um novo mecanismo de reconhecimento que podemos usar com o Asterisk® SCF™ &lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt;&lt;b&gt;SpeechCreate&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; com os comandos, padrão, &lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt;&lt;b&gt;SpeechStart&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; e &lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt;&lt;b&gt;SpeechDestroy&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; para enviar o áudio e fazer com que o mecanismo retorne o resultado:&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;exten =&amp;gt; 550,1,NoOp()&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;same =&amp;gt; n,Answer()&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;same =&amp;gt; n,SpeechCreate(my-speech-to-text)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;same =&amp;gt; n,SpeechStart()&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;same =&amp;gt; n,SpeechBackground(hello-world)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;same =&amp;gt; n,Verbose(0,${SPEECH_TEXT(0)})&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;same =&amp;gt; n,SpeechDestroy()&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;same =&amp;gt; n,Hangup()&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Este &quot;&lt;b&gt;my-speech-to-text&lt;/b&gt;&quot; é um motor &quot;customizado&quot; que criamos graças a um servidor &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;websocket&lt;/span&gt;&lt;/b&gt; que recebe o áudio e o envia para a API de reconhecimento do Google para que retorne a variável &lt;b&gt;${SPEECH_TEXT}&lt;/b&gt;. 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). &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Esse &quot;my-speech-to-text&quot; está configurado no arquivo de configuração &#39;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;aeap.conf&lt;/span&gt;&lt;/b&gt;&#39; que teria algo assim:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;[my-speech-to-text]&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;type=client&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;codecs=!all,ulaw&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;url=ws://127.0.0.1:9099&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;protocol=speech_to_text  &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;e na porta 9099 teríamos um servidor websocket que receberia o áudio e geraria as variáveis ​​de resultado.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Nesta URL você pode encontrar o servidor websocket que eles usam como exemplo:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;URL: &amp;lt;&lt;a href=&quot;https://github.com/asterisk/aeap-speech-to-text&quot; target=&quot;_blank&quot;&gt;https://github.com/asterisk/aeap-speech-to-text&lt;/a&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;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.&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Mas informações:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;URL1: &amp;lt;&lt;a href=&quot;https://www.asterisk.org/asterisk-external-application-protocol-an-intro/&quot; target=&quot;_blank&quot;&gt;https://www.asterisk.org/asterisk-external-application-protocol-an-intro/&lt;/a&gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;URL2: &amp;lt;&lt;a href=&quot;https://www.asterisk.org/asterisk-external-application-protocol-speech-to-text-engine/&quot; target=&quot;_blank&quot;&gt;https://www.asterisk.org/asterisk-external-application-protocol-speech-to-text-engine/&lt;/a&gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;URL3: &amp;lt;&lt;a href=&quot;https://github.com/asterisk/aeap-speech-to-text&quot; target=&quot;_blank&quot;&gt;https://github.com/asterisk/aeap-speech-to-text&lt;/a&gt;&amp;gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent; font-family: arial;&quot;&gt;Fonte: &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Site &lt;a href=&quot;https://www.sinologic.net&quot; target=&quot;_blank&quot;&gt;Sinologic&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/7360097120022758836/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/7360097120022758836' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/7360097120022758836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/7360097120022758836'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/12/aeap-o-protocolo-de-aplicativos.html' title='AEAP: O protocolo de aplicativos externos do Asterisk® SCF™'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiogQJwbcfq6PN6zKVyQifCuwMFYKGuMzFF0EU4KU38uw7Dv9sz34-ON0QCtwA0vkC4SdVAkPlA0BFYxwnxRFszRcnCLSotWwRu6fisFMOinHTit_LkWjIu-rBWUHxxVumUbNPDuU4YTsWBIEXxmwh-jqOhVIp_Feuiz0z4oBP9IMQtqLQ5JA9jDpSHsDg/s72-c/AEAP.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-4242137538691403544</id><published>2023-10-30T05:39:00.004-10:00</published><updated>2023-10-30T05:39:25.099-10:00</updated><title type='text'>Mean Opinion Score - MOS (POLQA vs PESQ)</title><content type='html'>&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmUDdgCEnMaAD4QsETUajF9__AW8I2Q9b15FYGUVEtOiwFc1q19nvYLj6J58ElGO5ikx8d57X3unXGhg7w-ediqUVSwvrY_Goyy95c1UYWl-zDo8OFeaO29_uM1uhXH2qB6RIsy1z7hSYYy-5gOfx2RnWwtMRboja0fcIPkR8Iy7CQ9I5q_6zwywiuyFE/s1280/figure_2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1280&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmUDdgCEnMaAD4QsETUajF9__AW8I2Q9b15FYGUVEtOiwFc1q19nvYLj6J58ElGO5ikx8d57X3unXGhg7w-ediqUVSwvrY_Goyy95c1UYWl-zDo8OFeaO29_uM1uhXH2qB6RIsy1z7hSYYy-5gOfx2RnWwtMRboja0fcIPkR8Iy7CQ9I5q_6zwywiuyFE/w400-h225/figure_2.jpg&quot; width=&quot;400&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;O MOS é um teste utilizado há anos para medir a qualidade das redes telefônicas.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Dito isso, q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Porém, há motivos pelos quais, durante uma conversa, temos interesse em conhecer a qualidade do áudio para descobrir erros, problemas e resolvê-los.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;80% das vezes, os erros de áudio geralmente são devidos a problemas de qualidade de serviço ou largura de banda insuficiente.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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”.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Imagine que você está trabalhando, faz uma ligação e o som está entrecortado... por que isso acontece?&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Como pode ser resolvido?&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Certamente diremos que é por falta de largura de banda, ou algum gargalo, mas e se não for isso?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Precisamos medir a qualidade de uma chamada para garantir que as conversas tenham a qualidade mínima exigida.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Esta medição deve ser objetiva e verificável, por isso temos que nos aprofundar em um novo tema.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Para medir a qualidade de uma chamada temos que conhecer alguns conceitos-chave no mundo das comunicações VoIP:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Latência:&lt;/span&gt;&lt;/b&gt; É o atraso desde o microssegundo em que o som chega ao microfone do nosso telefone, até sair pelo alto-falante do aparelho do receptor.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Esta latência costuma ser inferior a 100ms e quando é superior (&amp;lt;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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;j&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;itter:&lt;/b&gt;&lt;/span&gt; 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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Mas se a latência variar a cada segundo, manter uma conversa será extremamente difícil.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Ainda mais quando isso causa perda de pacotes porque há novos pacotes que chegam antes dos mais antigos.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;É como dizer: - “&lt;b&gt;Vou comprar pão&lt;/b&gt;” e esse “&lt;b&gt;pão&lt;/b&gt;” chega antes de “&lt;b&gt;comprar&lt;/b&gt;”, para que o sistema receptor elimine “&lt;b&gt;comprar&lt;/b&gt;” e você ouviria “&lt;b&gt;Vou… pão&lt;/b&gt;”.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Pacotes perdidos:&lt;/span&gt;&lt;/b&gt; Por vários motivos, um pacote pode desaparecer: muito tempo para ser transmitido (cada pacote tem um &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;TTL -time to live &lt;/span&gt;&lt;/b&gt;- 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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Existem codecs que permitem “&lt;b&gt;completar automaticamente&lt;/b&gt;” o áudio que falta, dando aquela sensação de áudio “&lt;b&gt;metálico&lt;/b&gt;” ou “&lt;b&gt;robótico&lt;/b&gt;” que todos nós certamente já experimentamos.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Largura de banda:&lt;/span&gt;&lt;/b&gt; 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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;em vez do G711, G722, G726, etc.&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Valores de medição&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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. &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Assim, analisando os valores específicos ao longo da conversa, podemos obter medidas mais práticas e interessantes:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Classe de Serviço (CoS):&lt;/span&gt;&lt;/b&gt; Mede a porcentagem de pacotes que chegam nas duas extremidades durante toda a conversa.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;O ideal é que cheguem 100% dos pacotes (CoS = 100%) mas se tivermos valores semelhantes não é drama (&amp;gt;95%).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Mean Opinion Score (MOS):&lt;/span&gt;&lt;/b&gt; É uma das medidas mais utilizadas para saber a qualidade de uma conversa.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Fator R:&lt;/span&gt;&lt;/b&gt; É 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:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nYzChXgFLl1FuC-LNR98piL66TDc81KiAW2ScTE4m7j1RJhFmQ3LiCM1C6aS816dd48yv4OtYcecj2kEGTQWgCwNIA-nJsURFu3Kj-y_-s9X4al7DyvCL9-ztNreLiys4x6uMSyVLKiPtZcAkAozsWPK2WZlm8BLcT54_DWUuBB_flCQ4-F84wP_PXw/s491/medida-similar-al-MOS.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;315&quot; data-original-width=&quot;491&quot; height=&quot;256&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nYzChXgFLl1FuC-LNR98piL66TDc81KiAW2ScTE4m7j1RJhFmQ3LiCM1C6aS816dd48yv4OtYcecj2kEGTQWgCwNIA-nJsURFu3Kj-y_-s9X4al7DyvCL9-ztNreLiys4x6uMSyVLKiPtZcAkAozsWPK2WZlm8BLcT54_DWUuBB_flCQ4-F84wP_PXw/w400-h256/medida-similar-al-MOS.gif&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; (Perceptual Objective Listening Quality Analysis) e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ &lt;/span&gt;&lt;/b&gt;(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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ&lt;/span&gt;&lt;/b&gt; é um algoritmo que mede a qualidade do sinal de voz após compressão, roteamento e processamento do sinal.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Fornece uma pontuação de qualidade de voz em uma escala de 0 a 5, sendo que 5 representa a melhor qualidade possível.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Por outro lado, o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; é uma evolução do &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ&lt;/span&gt;&lt;/b&gt; que utiliza um modelo auditivo mais avançado para avaliar a qualidade da voz.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;O &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; é 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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Ambos os algoritmos simulam o processo perceptivo humano usando técnicas de processamento de sinal.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;O &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; usa uma técnica de processamento de sinal chamada “Análise de Pulso Cepstral de Longo Prazo” (&lt;b&gt;LTPC&lt;/b&gt;).&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Por outro lado, o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ&lt;/span&gt;&lt;/b&gt; 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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Notavelmente, o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ-LQ&lt;/span&gt;&lt;/b&gt; é uma variante do &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ&lt;/span&gt;&lt;/b&gt; 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.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Em resumo, &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ&lt;/span&gt;&lt;/b&gt; 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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; é uma evolução do &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PESQ&lt;/span&gt;&lt;/b&gt; 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.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Atualmente apenas as soluções comerciais incluem &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; (&lt;b&gt;PEXQ&lt;/b&gt;, &lt;b&gt;VQuad&lt;/b&gt; e &lt;b&gt;OPTICOM&lt;/b&gt;), uma vez que o algoritmo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; é propriedade da &lt;b&gt;União Internacional de Telecomunicações&lt;/b&gt; (&lt;b&gt;UIT&lt;/b&gt;) e está protegido por direitos de autor.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;As ferramentas comerciais de medição de qualidade de voz que utilizam &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;POLQA&lt;/span&gt;&lt;/b&gt; obtiveram licenças para usar o algoritmo e estão sujeitas a restrições de uso e distribuição.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;No entanto, existem algumas &lt;b&gt;ferramentas de medição de qualidade de voz de código aberto&lt;/b&gt; que utilizam outros algoritmos para medir a qualidade de voz em sistemas de comunicação VoIP, como &lt;b&gt;PESQ&lt;/b&gt; e &lt;b&gt;PESQ-LQ&lt;/b&gt; (Perceptual Evaluation of Speech Quality).&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Ferramentas como &lt;b&gt;OpenMOS&lt;/b&gt;, &lt;b&gt;VQmon/EP&lt;/b&gt; ou implantação de um sistema &lt;b&gt;STOQ&lt;/b&gt; (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 &lt;b&gt;POLQA&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Outras ferramentas de análise e medição&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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… )&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Havia um muito bom, embora comercial, chamado VQManager.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Infelizmente, tal como acontece com o software comercial, o software é descontinuado, abandonado e desaparece em vez de ser lançado.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Felizmente, existem mais ferramentas que analisam esta informação e oferecem resultados muito interessantes:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Homer SIP Capture: &lt;a href=&quot;http://sipcapture.org/&quot; target=&quot;_blank&quot;&gt;http://sipcapture.org/&lt;/a&gt; (Opensource)&lt;/li&gt;&lt;li&gt; VoIPMonitor: &lt;a href=&quot;http://www.voipmonitor.org/&quot; target=&quot;_blank&quot;&gt;http://www.voipmonitor.org/&lt;/a&gt; (Opensource)&lt;/li&gt;&lt;li&gt; Recqual: &lt;a href=&quot;https://sourceforge.net/projects/recqual/&quot; target=&quot;_blank&quot;&gt;https://sourceforge.net/projects/recqual/&lt;/a&gt; (Opensource)&lt;/li&gt;&lt;li&gt; AQua: &lt;a href=&quot;http://sevana.biz/products/aqua/&quot; target=&quot;_blank&quot;&gt;http://sevana.biz/products/aqua/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Niqa: &lt;a href=&quot;http://sevana.biz/products/niqa/&quot; target=&quot;_blank&quot;&gt;http://sevana.biz/products/niqa/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; VoIPSpear: &lt;a href=&quot;https://www.voipspear.com/&quot; target=&quot;_blank&quot;&gt;https://www.voipspear.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; CommView: &lt;a href=&quot;http://www.tamos.com/products/commview/ &quot; target=&quot;_blank&quot;&gt;http://www.tamos.com/products/commview/&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Em resumo:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;É 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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Fonte: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.sinologic.net/blog/2016-06/como-medir-la-calidad-de-una-llamada.html&quot; target=&quot;_blank&quot;&gt;https://www.sinologic.net/blog/2016-06/como-medir-la-calidad-de-una-llamada.html&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/4242137538691403544/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/4242137538691403544' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4242137538691403544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4242137538691403544'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/10/mean-opinion-score-mos-polqa-vs-pesq.html' title='Mean Opinion Score - MOS (POLQA vs PESQ)'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmUDdgCEnMaAD4QsETUajF9__AW8I2Q9b15FYGUVEtOiwFc1q19nvYLj6J58ElGO5ikx8d57X3unXGhg7w-ediqUVSwvrY_Goyy95c1UYWl-zDo8OFeaO29_uM1uhXH2qB6RIsy1z7hSYYy-5gOfx2RnWwtMRboja0fcIPkR8Iy7CQ9I5q_6zwywiuyFE/s72-w400-h225-c/figure_2.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-6817657616008020778</id><published>2023-10-30T04:51:00.004-10:00</published><updated>2023-10-30T04:51:44.075-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SIP"/><title type='text'>UPDATE/RE-INVITE e SDP em SIP</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRP7xETLE_T4RGZcWKsC_vB7ceOMRDlF6MNvTXG9A8iHYgOU28O6y7yAx8aX_P_GLHfcaZiOCI8LpMtGe9BGFrDxdH14ugTt1-byHzZaJPM-ttoub2_8GaaGwtmgqZDfY8pbhiRtk8ilIoMw8faGNeuTlsgeFZyo8HIsLzFySQU_oPurM9s0VxBQZmbjU/s503/sip-e1667986004376.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;230&quot; data-original-width=&quot;503&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRP7xETLE_T4RGZcWKsC_vB7ceOMRDlF6MNvTXG9A8iHYgOU28O6y7yAx8aX_P_GLHfcaZiOCI8LpMtGe9BGFrDxdH14ugTt1-byHzZaJPM-ttoub2_8GaaGwtmgqZDfY8pbhiRtk8ilIoMw8faGNeuTlsgeFZyo8HIsLzFySQU_oPurM9s0VxBQZmbjU/s16000/sip-e1667986004376.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Normalmente quando uma sessão SIP é estabelecida, alguns &quot;timers&quot; são estabelecidos para saber quem e em que horário irá atualizar a sessão, normalmente o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UAS&lt;/span&gt;&lt;/b&gt; (User Agent Server) ou &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UAC&lt;/span&gt;&lt;/b&gt; (User Agent Client) é estabelecido como o atualizador da sessão e este é confirmado na resposta &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;200 OK &lt;/span&gt;&lt;/b&gt;do estabelecimento da sessão.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;SESSION-EXPIRES: 600;refresher=uac&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Neste caso a sessão expira após 600 segundos e o responsável por atualizar a sessão é o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UAC&lt;/span&gt;&lt;/b&gt; (cliente, que inicia a chamada)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;.

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Esta atualização de sessão geralmente é feita com &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UPDATE&lt;/span&gt;&lt;/b&gt; ou &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;RE-INVITE&lt;/span&gt;&lt;/b&gt;, a diferença entre usar esses 2 métodos é que o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UPDATE&lt;/span&gt;&lt;/b&gt; deve ser respondido imediatamente.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;No caso do &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UPDATE&lt;/span&gt;&lt;/b&gt; podemos identificá-lo facilmente já que o método muda, mas no caso do &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;RE-INVITE&lt;/span&gt;&lt;/b&gt;, no nível SIP vemos apenas um &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;INVITE&lt;/span&gt;&lt;/b&gt; e podemos identificá-lo, já que o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;RE-INVITE&lt;/span&gt;&lt;/b&gt; tem o mesmo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;FROM&lt;/span&gt;&lt;/b&gt; e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;CALL-ID&lt;/span&gt;&lt;/b&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLXU1er3l46rmf1f1fd55RSeNc0MhoQbgHF9P2dYzdh6py9hnpHZP2T4FKrCxvqBq4H57K7_aQZaLcMT9-Z8h5cH3IUDF-P0U2uI47rwPZ-GgAbXshABj4RY0Tpqm0tkL11NYyF5n7XLjU-1iBBJkZ9p3gWd-RHJq4uODVLhZ5OqyLxsENF0_9oewotnE/s1024/image-1024x281.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;281&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLXU1er3l46rmf1f1fd55RSeNc0MhoQbgHF9P2dYzdh6py9hnpHZP2T4FKrCxvqBq4H57K7_aQZaLcMT9-Z8h5cH3IUDF-P0U2uI47rwPZ-GgAbXshABj4RY0Tpqm0tkL11NYyF5n7XLjU-1iBBJkZ9p3gWd-RHJq4uODVLhZ5OqyLxsENF0_9oewotnE/s16000/image-1024x281.png&quot; /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;ID &lt;/span&gt;&lt;/b&gt;de sessão deve ser mantido no &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;SDP&lt;/span&gt;&lt;/b&gt;, em caso de alteração de média, o&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt; ID&lt;/span&gt;&lt;/b&gt; de sessão deve ser aumentado em 1:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;Owner/Creator, Session Id (o): – 4117888791 2277746976 IN IP4 3.3.3.3&lt;/strong&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;mudar para:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;Owner/Creator, Session Id (o): – 4117888791 2277746977 IN IP4 3.3.3.3&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYEnsPVGYrg6vr4HiPkfAx5NCLSE8vN-F4CrmY6h2QfDgszaQhm6JFpxYBbyfjqqlS4k0kywl0LDJboQkZ7z54fE-c-IyeC1W4fz1NKlLqv_KD8-BVr2i_iNhC9Eg_ehkrKpwpyFGta1gGPIcEY2Asz7yWVyptMqVrew1DKFJIIRcUQhVmIB8H5GhN-DI/s1024/image-1-1024x49.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;49&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYEnsPVGYrg6vr4HiPkfAx5NCLSE8vN-F4CrmY6h2QfDgszaQhm6JFpxYBbyfjqqlS4k0kywl0LDJboQkZ7z54fE-c-IyeC1W4fz1NKlLqv_KD8-BVr2i_iNhC9Eg_ehkrKpwpyFGta1gGPIcEY2Asz7yWVyptMqVrew1DKFJIIRcUQhVmIB8H5GhN-DI/s16000/image-1-1024x49.png&quot; /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Neste caso a média é alterada e, portanto, aumentada em 1.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Fontes:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;URL-01: &lt;a href=&quot;https://datatracker.ietf.org/doc/rfc3725/&quot; target=&quot;_blank&quot;&gt;https://datatracker.ietf.org/doc/rfc3725/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;URL-02:&amp;nbsp; &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc6141&quot; target=&quot;_blank&quot;&gt;https://datatracker.ietf.org/doc/html/rfc6141 &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/6817657616008020778/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/6817657616008020778' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6817657616008020778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6817657616008020778'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/10/updatere-invite-e-sdp-em-sip.html' title='UPDATE/RE-INVITE e SDP em SIP'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRP7xETLE_T4RGZcWKsC_vB7ceOMRDlF6MNvTXG9A8iHYgOU28O6y7yAx8aX_P_GLHfcaZiOCI8LpMtGe9BGFrDxdH14ugTt1-byHzZaJPM-ttoub2_8GaaGwtmgqZDfY8pbhiRtk8ilIoMw8faGNeuTlsgeFZyo8HIsLzFySQU_oPurM9s0VxBQZmbjU/s72-c/sip-e1667986004376.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-7569473069050222525</id><published>2023-09-15T07:02:00.004-10:00</published><updated>2023-09-15T07:37:57.311-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="CODEC"/><title type='text'>Configurando o CODEC Opus para Asterisk® SCF™</title><content type='html'>&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnRzDobwIggmx9ZFSKFPMRVS0peE-JBY1V7OnKA5dTPJ_VNupikcTNLFU2wjoqV9x6gnp8MBnR4Mru7HVwbKpInVNndTyyvbJ4CcaQWFyzDcDiQFW_7-Z11HDN3Do8GTdqcZcUeFbJIEs/s280/opus-logo.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;250&quot; data-original-width=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnRzDobwIggmx9ZFSKFPMRVS0peE-JBY1V7OnKA5dTPJ_VNupikcTNLFU2wjoqV9x6gnp8MBnR4Mru7HVwbKpInVNndTyyvbJ4CcaQWFyzDcDiQFW_7-Z11HDN3Do8GTdqcZcUeFbJIEs/s16000/opus-logo.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;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 &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;codecs.conf&lt;/b&gt;&lt;/span&gt;. Eles são úteis para personalizar um tipo de formato que pode então ser especificado na linha “&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;allow&lt;/b&gt;&lt;/span&gt;” 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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;SDP&lt;/span&gt;&lt;/b&gt;, 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&amp;nbsp; Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;CBR &lt;/span&gt;&lt;/h2&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Quando definido como “&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/span&gt;”, o codificador usa uma &lt;b&gt;taxa de bits constante&lt;/b&gt; em oposição a uma &lt;b&gt;taxa de bits variável&lt;/b&gt;. 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 “&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;no&lt;/b&gt;&lt;/span&gt;”, que é o padrão. No entanto, alguns dispositivos e configurações podem &lt;b&gt;exigir taxas de bits constantes&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Definir este valor como “&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/span&gt;” também define o parâmetro “&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;cbr&lt;/span&gt;&lt;/b&gt;” igual a “&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;” no &lt;b&gt;SDP&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;BITRATE &lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;A especificação deste valor define um limite aproximado de taxa de bits no codificador. Os seguintes valores são permitidos:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;auto&lt;/span&gt;&lt;/b&gt; – permite que o codificador controle a taxa de bits. &lt;b&gt;Este é o padrão&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;max&lt;/span&gt;&lt;/b&gt; – O codificador usa a quantidade máxima que pode. &lt;b&gt;500&lt;/b&gt; - &lt;b&gt;512000&lt;/b&gt; – Qualquer valor entre e incluindo esses dois números. Quando designado, este valor também define o parâmetro “&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;maxaveragebitrate&lt;/span&gt;&lt;/b&gt;” no &lt;b&gt;SDP&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Embora não seja o único fator, a &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;taxa de bits afeta diretamente a qualidade do áudio&lt;/span&gt;&lt;/b&gt;. Diminuir a taxa de bits diminui a &lt;b&gt;qualidade do áudio&lt;/b&gt;, enquanto aumentá-la &lt;b&gt;aumenta a qualidade&lt;/b&gt;. Dito isto, o áudio contendo apenas fala geralmente pode ser codificado em uma &lt;b&gt;taxa de bits muito mais baixa&lt;/b&gt; do que o áudio contendo música, sem uma degradação perceptível na qualidade.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;16.000&lt;/span&gt;&lt;/b&gt;, então isso precisará ser definido como &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;16.000&lt;/span&gt;&lt;/b&gt; ou menos, para atuar com sistema de WebPhones, a taxa de bits média máxima de 8.000 é perfeita.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;DTX&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Se “&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;”, então a transmissão descontínua está habilitada.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Isto significa que o codificador tentará reduzir a taxa de bits quando o silêncio for detectado.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Quando definido, também define o parâmetro “&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;usedtx&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;” igual a “&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;” no &lt;b&gt;SDP&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;O valor padrão para “dtx” é “&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;no&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;”.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;MAX_PLAYBACK_RATE&lt;/h2&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Isso define o parâmetro “&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;maxplaybackrate&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;” do &lt;b&gt;SDP&lt;/b&gt; e também &lt;b&gt;limita a largura de banda no codificador&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Qualquer valor igual ou entre &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;8.000&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; e &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;48.000&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; é permitido.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;O seguinte mostra um mapeamento de larguras de banda com base em um valor especificado:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;table style=&quot;-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;&quot;&gt;&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;background-color: #eff0f2; box-sizing: border-box;&quot;&gt;&lt;td style=&quot;background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;8000&lt;/td&gt;&lt;td style=&quot;background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;Banda Estreita&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;8001 – 16000&lt;/td&gt;&lt;td style=&quot;border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;Banda Média&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #eff0f2; box-sizing: border-box;&quot;&gt;&lt;td style=&quot;background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;16001 – 24000&lt;/td&gt;&lt;td style=&quot;background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;Banda Larga&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;24001 – 32000&lt;/td&gt;&lt;td style=&quot;border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;Banda Super Larga&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #eff0f2; box-sizing: border-box;&quot;&gt;&lt;td style=&quot;background-color: rgba(128, 128, 128, 0.1); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;32001 – 48000&lt;/td&gt;&lt;td style=&quot;background-color: rgba(128, 128, 128, 0.1); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;&quot;&gt;Banda Completa&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Está opção tem um valor padrão de 48.000, o que é óbvio não é o recomendado para nossas soluções no Brasil. &lt;b&gt;O recomendado é de 8.000&lt;/b&gt;. &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;PACKET_LOSS&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Isso estipula a porcentagem esperada de perda de pacotes (&lt;b&gt;0 a 100&lt;/b&gt;) no codificador.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;O &lt;b&gt;Opus&lt;/b&gt; tem alguns truques na manga quando se trata de perda de pacotes, como correção de erros de encaminhamento em banda (&lt;b&gt;FEC&lt;/b&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Falaremos um pouco mais sobre &lt;b&gt;FEC&lt;/b&gt; posteriormente, mas para que o codificador inclua os dados FEC, esta opção precisa ser definida com um valor apropriado.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;Aumentar a porcentagem&lt;/b&gt; significa melhor &lt;b&gt;proteção contra perdas&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;No entanto, deve-se ressaltar que &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;o ajuste deste valor pode afetar a qualidade&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Para manter a taxa média de bits e ao mesmo tempo incluir informações de perda de pacotes, o &lt;b&gt;Opus&lt;/b&gt; pode diminuir a taxa do áudio atual que está sendo codificado.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;A configuração padrão para isso é &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;ZERO&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Se você estiver tendo problemas de áudio devido à perda de pacotes, tente ajustar esse valor para ver se isso ajuda.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; face=&quot;Roboto, RobotoDraft, Helvetica, Arial, sans-serif&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;&lt;span style=&quot;background-color: white;&quot;&gt;APPLICATION&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Os seguintes valores são permitidos:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;voip&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; – O codificador espera voz ou dados de fala.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Esta é a configuração padrão.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;audio&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; – O codificador não faz nenhuma suposição especial sobre os dados.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;low_delay&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; – Os dados são codificados com o menor atraso de codificação possível.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;&lt;span style=&quot;background-color: white;&quot;&gt;SIGNAL&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Os seguintes valores são permitidos:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;auto&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; – permite que o codificador escolha.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Esta é a configuração padrão.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: white;&quot;&gt;voice&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; – O codificador prefere operar em modos mais propícios aos dados de fala.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;music&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;– O codificador tende a operar em um modo mais aceitável para outro áudio.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;COMPLEXITY&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;A &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;complexidade computacional do Opus&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; pode variar dependendo de vários fatores.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Normalmente, &lt;b&gt;quanto maior a qualidade de áudio&lt;/b&gt; para a qual o codec está configurado, maior a complexidade e, portanto, &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;potencialmente maior a utilização da CPU&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Isto pode ser um pouco mitigado por outras configurações, por exemplo, a codificação de voz é menos complexa que a música.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;A modificação da configuração de complexidade afeta diretamente a utilização da CPU.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Os valores permitidos variam de &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt; (zero) a &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;. Um valor zero representa quantidades menores de tempo de CPU usado, enquanto um valor de dez é o maior tempo concedido.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;FEC&lt;/h2&gt;&lt;h2&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Quando definido como “&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;”, isso informa ao codificador para adicionar dados de correção de erro direto (&lt;b&gt;Forward Error Correction - FEC&lt;/b&gt;)  em banda aos quadros &lt;b&gt;Opus&lt;/b&gt; codificados.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Os quadros contendo informações &lt;b&gt;FEC&lt;/b&gt; permitem que os decodificadores reconstruam um quadro anteriormente perdido.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Definir este valor não significa que o codificador adiciona &lt;b&gt;FEC&lt;/b&gt; automaticamente aos quadros de saída.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Outras condições também devem ser atendidas no codificador antes que ele adicione as informações.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Por exemplo, deve estar operando no modo correto.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Além disso, ajustar a porcentagem de “&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;packet_loss&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;” para um valor esperado apropriado deve acionar a adição de &lt;b&gt;FEC&lt;/b&gt; assim que o limite de perda interna for atingido.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Definir este valor como “&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;” também define o parâmetro “&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;useinbandfec&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;” igual a “&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;” no &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;SDP&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Esta opção tem como padrão o valor “&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&lt;b&gt;no&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;”.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;O que mais ?&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Atualmente, todas essas opções de configuração são suportadas.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Há também uma página wiki que lista todas as opções mais recentes junto com alguns exemplos.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Não deixe de conferir!&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;-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;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;Se ou quando novas configurações forem disponibilizadas, essa página &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;será &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;atualizada.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;-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;&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;-webkit-tap-highlight-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;E pensando que esteja utilizando o Asterisk 13.35.0: &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;apt-get install -y libopus-dev opus-tools&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;cd /opt/&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;wget http://downloads.digium.com/pub/telephony/codec_opus/asterisk-13.0/x86-64/codec_opus-13.0_current-x86_64.tar.gz&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;tar -zxvf codec_opus-13.0_current-x86_64.tar.gz&amp;nbsp;
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/&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;vim /etc/asterisk/modules.conf&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;load = codec_opus&lt;br /&gt;load = res_format_attr_opus.so&lt;br /&gt;load = res_crypto&lt;br /&gt;load = res_http_websocket&lt;br /&gt;load = res_pjsip_transport_websocket&lt;br /&gt;load = res_srtp&lt;br /&gt;load = format_ogg_opus.so&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;vim /etc/asterisk/rtp.conf&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;[general]&lt;br /&gt;rtpstart=10000                      ;; ajuste para sua realidade  &lt;br /&gt;rtpend=10099                        ;; ajuste para sua realidade&lt;br /&gt;rtpchecksums=no&lt;br /&gt;dtmftimeout=3000&lt;br /&gt;rtcpinterval=5000&lt;br /&gt;strictrtp=yes&lt;br /&gt;probation=4&lt;br /&gt;srtpreplayprotection=yes&lt;br /&gt;icesupport=yes                      ;; importante&lt;br /&gt;strictrtp=no                        ;; importante&lt;br /&gt;stunaddr=stun.l.google.com:19302    ;; importante&lt;br /&gt;stun_software_attribute=yes&lt;br /&gt;dtls_mtu=1200&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;vim codecs.conf&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;[speex]&lt;br /&gt;quality =&amp;gt; 3&lt;br /&gt;complexity =&amp;gt; 2&lt;br /&gt;enhancement =&amp;gt; true&lt;br /&gt;vad =&amp;gt; true&lt;br /&gt;vbr =&amp;gt; true&lt;br /&gt;abr =&amp;gt; 0&lt;br /&gt;vbr_quality =&amp;gt; 4&lt;br /&gt;dtx =&amp;gt; false&lt;br /&gt;preprocess =&amp;gt; false&lt;br /&gt;pp_vad =&amp;gt; false&lt;br /&gt;pp_agc =&amp;gt; false&lt;br /&gt;pp_agc_level =&amp;gt; 8000&lt;br /&gt;pp_denoise =&amp;gt; false&lt;br /&gt;pp_dereverb =&amp;gt; false&lt;br /&gt;pp_dereverb_decay =&amp;gt; 0.4&lt;br /&gt;pp_dereverb_level =&amp;gt; 0.3&lt;br /&gt;&lt;br /&gt;[plc]&lt;br /&gt;genericplc =&amp;gt; true&lt;br /&gt;genericplc_on_equal_codecs =&amp;gt; false&lt;br /&gt;&lt;br /&gt;[silk8]&lt;br /&gt;type=silk&lt;br /&gt;samprate=8000&lt;br /&gt;fec=true&lt;br /&gt;packetloss_percentage=10&lt;br /&gt;maxbitrate=10000&lt;br /&gt;&lt;br /&gt;[silk12]&lt;br /&gt;type=silk&lt;br /&gt;samprate=12000&lt;br /&gt;maxbitrate=12000&lt;br /&gt;fec=true&lt;br /&gt;packetloss_percentage=10;&lt;br /&gt;&lt;br /&gt;[silk16]&lt;br /&gt;type=silk&lt;br /&gt;samprate=16000&lt;br /&gt;maxbitrate=20000&lt;br /&gt;fec=true&lt;br /&gt;packetloss_percentage=10;&lt;br /&gt;&lt;br /&gt;[silk24]&lt;br /&gt;type=silk&lt;br /&gt;samprate=24000&lt;br /&gt;maxbitrate=30000&lt;br /&gt;fec=true&lt;br /&gt;packetloss_percentage=10;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;[opus]&lt;br /&gt;type=opus&lt;br /&gt;packet_loss=5&lt;br /&gt;complexity=10&lt;br /&gt;max_bandwidth=narrow&lt;br /&gt;signal=auto&lt;br /&gt;application=voip&lt;br /&gt;max_playback_rate=8000&lt;br /&gt;bitrate=auto&lt;br /&gt;cbr=1&lt;br /&gt;fec=1&lt;br /&gt;dtx=0&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;vim /etc/asterisk/sip.conf&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;[general]&lt;br /&gt;callcounter=yes ; Habilita estado dos endpoints SIP.&lt;br /&gt;rtcachefriends=yes&lt;br /&gt;udpbindaddr=0.0.0.0:5060&lt;br /&gt;disallow=all&lt;br /&gt;allow=opus&lt;br /&gt;allow=ulaw&lt;br /&gt;allow=alaw&lt;br /&gt;allow=gsm&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;rasterisk -vvvvgci&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;*CLI&amp;gt; module show like opus&lt;br /&gt;Module                  Description        Use Count  Status      Support Level&lt;br /&gt;codec_opus.so           OPUS Coder/Decoder 0          Running     extended&lt;br /&gt;format_ogg_opus.so      OGG/Opus audio     0          Running     core&lt;br /&gt;res_format_attr_opus.so Opus Format Attribute Module  1 Running   core&lt;br /&gt;3 modules loaded&lt;br /&gt;*CLI&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot; style=&quot;-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, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;*CLI&amp;gt; core show translation paths opus &lt;br /&gt;--- Translation paths SRC Codec &quot;opus&quot; sample rate 48000 ---&lt;br /&gt;opus:48000 To codec2:8000 : No Translation Path&lt;br /&gt;opus:48000 To g723:8000   : No Translation Path&lt;br /&gt;opus:48000 To ulaw:8000   : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@8000)-&amp;gt;(ulaw@8000)&lt;br /&gt;opus:48000 To alaw:8000   : No Translation Path&lt;br /&gt;opus:48000 To gsm:8000    : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@8000)-&amp;gt;(gsm@8000)&lt;br /&gt;opus:48000 To g726:8000   : No Translation Path&lt;br /&gt;opus:48000 To g726aal2:8000 : No Translation Path&lt;br /&gt;opus:48000 To adpcm:8000  : No Translation Path&lt;br /&gt;opus:48000 To slin:8000   : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@8000)&lt;br /&gt;opus:48000 To slin:12000  : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@12000)&lt;br /&gt;opus:48000 To slin:16000  : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@16000)&lt;br /&gt;opus:48000 To slin:24000  : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@24000)&lt;br /&gt;opus:48000 To slin:32000  : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@32000)&lt;br /&gt;opus:48000 To slin:44100  : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@44100)&lt;br /&gt;opus:48000 To slin:48000  : (opus@48000)-&amp;gt;(slin@48000)&lt;br /&gt;opus:48000 To slin:96000  : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@96000)&lt;br /&gt;opus:48000 To slin:192000 : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@192000)&lt;br /&gt;opus:48000 To lpc10:8000  : No Translation Path&lt;br /&gt;opus:48000 To g729:8000   : No Translation Path&lt;br /&gt;opus:48000 To speex:8000  : No Translation Path&lt;br /&gt;opus:48000 To speex:16000 : No Translation Path&lt;br /&gt;opus:48000 To speex:32000 : No Translation Path&lt;br /&gt;opus:48000 To ilbc:8000   : No Translation Path&lt;br /&gt;opus:48000 To g722:16000 : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@16000)-&amp;gt;(g722@16000)&lt;br /&gt;opus:48000 To siren7:16000 : No Translation Path&lt;br /&gt;opus:48000 To siren14:32000 : No Translation Path&lt;br /&gt;opus:48000 To testlaw:8000 : (opus@48000)-&amp;gt;(slin@48000)-&amp;gt;(slin@8000)-&amp;gt;(testlaw@8000)&lt;br /&gt;opus:48000 To g719:48000 : No Translation Path&lt;br /&gt;opus:48000 To none:8000 : No Translation Path&lt;br /&gt;opus:48000 To silk:8000 : No Translation Path&lt;br /&gt;opus:48000 To silk:12000 : No Translation Path&lt;br /&gt;opus:48000 To silk:16000 : No Translation Path&lt;br /&gt;opus:48000 To silk:24000 : No Translation Path                                         &lt;br /&gt;*CLI&amp;gt; &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Qualquer dúvida, estou a disposição no e-mail &lt;b&gt;professor.delphini#outlook.com&lt;/b&gt;. 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: &lt;a href=&quot;https://t.me/asterisk_br&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;https://t.me/asterisk_br&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Uma vez na comunidade, pode questionar, pois tem na mesma uma gama muito grande de profissionais sempre com o &lt;b&gt;espírito de liberdade&lt;/b&gt;!&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Recomendo que veja:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;URL: &lt;a href=&quot;https://jmvalin.ca/opus/opus-1.2/&quot; target=&quot;_blank&quot;&gt;https://jmvalin.ca/opus/opus-1.2/&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;URL: &lt;a href=&quot;http://downloads.digium.com/pub/telephony/codec_opus/&quot; target=&quot;_blank&quot;&gt;http://downloads.digium.com/pub/telephony/codec_opus/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Fonte:&amp;nbsp;&lt;a href=&quot;https://docs.asterisk.org/Configuration/Codec-Opus/&quot; target=&quot;_blank&quot;&gt; https://docs.asterisk.org/Configuration/Codec-Opus/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/7569473069050222525/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/7569473069050222525' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/7569473069050222525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/7569473069050222525'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/09/configurando-o-codec-opus-para-asterisk.html' title='Configurando o CODEC Opus para Asterisk® SCF™'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnRzDobwIggmx9ZFSKFPMRVS0peE-JBY1V7OnKA5dTPJ_VNupikcTNLFU2wjoqV9x6gnp8MBnR4Mru7HVwbKpInVNndTyyvbJ4CcaQWFyzDcDiQFW_7-Z11HDN3Do8GTdqcZcUeFbJIEs/s72-c/opus-logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-4415505880415262271</id><published>2023-08-10T09:09:00.002-10:00</published><updated>2023-08-10T09:09:37.534-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Asterisk® SCF™, qualidade de chamadas e MES (Media Experience Score)</title><content type='html'>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;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&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;630&quot; data-original-width=&quot;1200&quot; src=&quot;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&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt; Medir a qualidade da chamada sempre foi bastante complicado e talvez o método mais conhecido/utilizado seja o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;MOS&lt;/span&gt;&lt;/b&gt; (Mean Opinion Score). Embora algoritmos sejam usados ​​para calcular o &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;MOS&lt;/b&gt;&lt;/span&gt;, 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.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Para fugir desse conceito e considerando que o novo índice é baseado em cálculos &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;puramente matemáticos&lt;/span&gt;&lt;/b&gt;, nasceu recentemente o &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;MES &lt;/b&gt;&lt;/span&gt;(Media Experience Score), sistema que permite medir a qualidade de áudio do canal &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PJSIP&lt;/span&gt;&lt;/b&gt; (chan_pjsip.so). O cálculo é baseado em &lt;b&gt;três valores&lt;/b&gt; que podem ser extrapolados a partir da vazão média:&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;RTT&lt;/b&gt; (tempo de ida e volta de um pacote de áudio);&amp;nbsp;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Jitter&lt;/b&gt;, que é um indicador de como o fluxo médio se comporta;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;A &lt;b&gt;perda de pacotes&lt;/b&gt; que afeta a qualidade do fluxo médio.&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Usando esses &lt;b&gt;três valores&lt;/b&gt;, é obtido um &lt;b&gt;Fator de Qualificação que vai de 0 a 100&lt;/b&gt;, onde &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;0&lt;/span&gt;&lt;/b&gt; equivale a qualidade de áudio ruim e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;100&lt;/span&gt;&lt;/b&gt; a qualidade de áudio ideal.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;O valor inicial desse &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Fator R&lt;/span&gt;&lt;/b&gt; foi definido em &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;93,2&lt;/span&gt;&lt;/b&gt; e uma fórmula é aplicada a esse valor para obter um valor final. Contribui para a formação desse valor final:&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;RTT médio&lt;/b&gt;;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Jitter médio&lt;/b&gt;;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Atraso do codec de áudio&lt;/b&gt; (pacotes perdidos).&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;O valor obtido, como já foi dito, pode estar entre 0 e 100 e a partir deste valor pode-se obter um índice entre &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;1&lt;/span&gt;&lt;/b&gt; e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;4,5&lt;/span&gt;&lt;/b&gt;, se necessário, tipo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;MOS&lt;/span&gt;&lt;/b&gt;, utilizando a seguinte fórmula:&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;No Asterisk® SCF™ podemos obter toda uma série de valores relacionados ao &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;MES&lt;/span&gt;&lt;/b&gt; através da função &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;CHANNEL ${CHANNEL(rtcp,&amp;lt;stat&amp;gt;)}&lt;/b&gt;&lt;/span&gt;, onde ao invés de &lt;b&gt;stat&lt;/b&gt; você pode colocar:&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;all_month;&lt;/li&gt;&lt;li&gt;txmes;&lt;/li&gt;&lt;li&gt;rxmeses;&lt;/li&gt;&lt;li&gt;remote_maxmonth;&lt;/li&gt;&lt;li&gt;remote_minmes;&lt;/li&gt;&lt;li&gt;remote_normdevmes;&lt;/li&gt;&lt;li&gt;remote_stdevmes;&lt;/li&gt;&lt;li&gt;local_maxmonth;&lt;/li&gt;&lt;li&gt;local_minmeses;&lt;/li&gt;&lt;li&gt;local_normdevmes;&lt;/li&gt;&lt;li&gt;local_stdevmes.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Com &lt;b&gt;LOCAL&lt;/b&gt; entendemos o fluxo de mídia que chega ao Asterisk® SCF™ e com &lt;b&gt;REMOTO&lt;/b&gt; o fluxo de mídia que sai do Asterisk® SCF™. Eu testei em duas chamadas:&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;uma entre ramais;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;e uma saída usando um tronco SIP.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Em ambos os casos, a qualidade era muito boa. Se quiséssemos expressar o valor com o índice de &lt;b&gt;1&lt;/b&gt; a &lt;b&gt;4,5&lt;/b&gt;, tomando, por exemplo, o valor do &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;MESlocalMAX&lt;/span&gt;&lt;/b&gt; da primeira chamada, que seria (arredondamento):&amp;nbsp;&lt;/p&gt;&lt;p&gt;Opinião = 1 + (0,035 x 85,4) + (85,4 x (85,4 – 60) x (100 – 85,4) * 0,0000007) = 4,01&lt;/p&gt;&lt;p&gt;Por Andrea Sannucci&lt;/p&gt;&lt;p&gt;Fonte: &lt;a href=&quot;https://sip5060.net/&quot; target=&quot;_blank&quot;&gt;Planet SIP&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/4415505880415262271/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/4415505880415262271' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4415505880415262271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4415505880415262271'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/08/asterisk-scf-qualidade-de-chamadas-e.html' title='Asterisk® SCF™, qualidade de chamadas e MES (Media Experience Score)'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlmkGbZiM_N2T49v1RU3oZLDAy2K7EytXW-ksqDDrbqmynoaKq6PJCtihf9CK9pahnWOss_fYzFo2dI7uLVRsWMkr8WczuyKYNfEfE6CNyRW_CkOmjuQifEYixK-s8DvPMV05sT5pmQb2GpbH3Urrr3W1ApHRgccD1nZCuyNpEtijWfjbjwmC6arp7JQ/s72-c/como-usar-a-placa-grafica-nvidia-para-melhorar-a-qualidade-das-chamadas-www.maistecnologia.com.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-6423523936752890634</id><published>2023-07-24T08:44:00.005-10:00</published><updated>2024-05-22T09:03:22.675-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Yeti"/><title type='text'>Yeti Switch - SOFTSWITCH PARA HUMANOS!!</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8VFgxBK1wl5NYTMAA_OBrdDPadEFb18cO6EPlr3IwO7gzj5QLXWUbTyxUDniVS1cfJD5rI6wqQOyJnR1BF2CzKAIU-LXazJ348-mqhTRY3jkXnQG96jUDj-CET73mj5cfjZKuvIK3mqTDBNemRGSnI4K1StjJJikILwLH9Y_bP2IirgC90vbTGMDr2c/s950/yeti-softswitch.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;470&quot; data-original-width=&quot;950&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8VFgxBK1wl5NYTMAA_OBrdDPadEFb18cO6EPlr3IwO7gzj5QLXWUbTyxUDniVS1cfJD5rI6wqQOyJnR1BF2CzKAIU-LXazJ348-mqhTRY3jkXnQG96jUDj-CET73mj5cfjZKuvIK3mqTDBNemRGSnI4K1StjJJikILwLH9Y_bP2IirgC90vbTGMDr2c/s16000/yeti-softswitch.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/b&gt;&lt;/h3&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;Versão 1.12&lt;/b&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;O sistema operacional suportado é Debian GNU/Linux 11, a única arquitetura suportada é amd64.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;color: #2b00fe;&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;b&gt;Configuração de repositórios&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot; style=&quot;color: #2b00fe;&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;A maioria dos servidores pode usar o mesmo conjunto de repositórios:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;deb&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ftp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;debian&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;debian&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bullseye&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;contrib&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;non&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;free&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;deb&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ftp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;debian&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;debian&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bullseye&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;updates&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;deb&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;security&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;debian&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;debian&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;security&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bullseye&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;security&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;deb&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pkg&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yeti&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;switch&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;debian&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bullseye&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;1.12&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;deb&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;apt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;postgresql&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;apt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bullseye&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pgdg&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Os repositórios do sistema podem ser alterados editando o arquivo: /etc/apt/sources.list.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Como usamos nosso próprio repositório de pacotes, você deve adicionar nossa chave a um arquivo confiável.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# apt install -y vim wget gnupg net-tools&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;wget&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;http://pkg.yeti-switch.org/key.gpg&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;apt-key&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;add&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;A chave do repositório PGDG também deve ser adicionada à lista confiável&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;wget&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;apt-key&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;add&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;Roteando a instalação do banco de dados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;NOTA:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;Versões suportadas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;pre&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;A única versão do PostgreSQL suportada é a 13.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Instalação de pacotes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;apt&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;update&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;o&quot;&gt;# &lt;/span&gt;apt&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-contrib-13&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-prefix&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-pgq3&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;# apt install postgresql-13-pgq-ext&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-yeti&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-pllua&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;pgqd&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Criação dos bancos de dados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Criar banco de dados de roteamento&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;su&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgres
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;psql&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;postgres=#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yeti&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;encrypted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;algumasenha&#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;superuser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;CREATE ROLE&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;postgres=#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yeti&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yeti&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;CREATE DATABASE&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;postgres=#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kp&quot;&gt;\q&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;postgres@yeti:~$ exit&amp;nbsp;&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: small;&quot;&gt;&lt;span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;NOTA: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Recomenda-se escolher nomes de bancos de dados, nomes de usuários e senhas diferentes dos especificados neste manual por motivos de segurança.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Para grandes instalações, é recomendável colocar o banco de dados CDR em um servidor dedicado.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;color: #2b00fe;&quot;&gt;Verificações&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Verifique se os bancos de dados foram criados com sucesso e estão acessíveis:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;@yeti&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# psql -h 127.0.0.1 -U yeti -d yeti&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Password&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;yeti&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;psql&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;9.4.5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SSL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cipher&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DHE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RSA&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AES256&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GCM&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SHA384&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;help&quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;yeti&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# \q&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;@yeti&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Não se esqueça de fazer alterações em &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;/etc/postgresql/13/main/pg_hba.conf&lt;/b&gt;&lt;/span&gt; e aplicá-las se você planeja acessar esses bancos de dados de outros hosts e/ou configurar a replicação do banco de dados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot; style=&quot;font-family: arial;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;color: #2b00fe;&quot;&gt;Instalação de bancos de dados CDR&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;c1&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;O sistema requer dois bancos de dados: um para roteamento e outro para CDRs.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;A configuração de diferentes instâncias do PostgreSQL é altamente recomendada para possibilitar a replicação.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Instalação de pacotes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Bancos de dados CDRs requerem um conjunto de pacotes semelhante ao banco de dados de roteamento&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;&lt;/span&gt;# apt&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;update&lt;span class=&quot;w&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;w&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;apt&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-contrib-13&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-prefix&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-pgq3&lt;span class=&quot;w&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;w&quot;&gt;# apt install&amp;nbsp;&lt;/span&gt;postgresql-13-pgq-ext&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-yeti&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgresql-13-pllua&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;pgqd&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: small;&quot;&gt;&lt;span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;NOTA: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;É importante instalar o Postgresql do repositório PGDG.&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Consulte a configuração dos repositórios para obter detalhes.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;Criação dos bancos de dados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Criar banco de dados cdr (&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span&gt;Call Detail Record).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;su&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgres
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;psql&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;postgres=#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cdr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;encrypted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;algumasenha&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;superuser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;CREATE ROLE&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;postgres=#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cdr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;CREATE DATABASE&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;postgres=#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kp&quot;&gt;\q&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;postgres@yeti:~$&amp;nbsp;exit&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;NOTA: &lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Recomenda-se escolher nomes de bancos de dados, nomes de usuários e senhas diferentes dos especificados neste manual por motivos de segurança.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Para grandes instalações, é recomendável colocar o banco de dados CDR em um servidor dedicado.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;Código PGQd&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Após a inicialização do banco de dados CDR, você deve executar &lt;b&gt;pgq ticker daemon&lt;/b&gt; (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pgqd&lt;/span&gt;&lt;/b&gt;) no servidor com banco de dados CDR.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;

&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Edite o arquivo de configuração &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;/etc/pgqd.ini&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; e realize as modificações a seguir:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;[pgqd]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;base_connstr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;host=127.0.0.1 port=5432 dbname=cdr user=cdr password=algumasenha&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;initial_database&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;cdr&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;database_list&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;cdr&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;pidfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/var/run/postgresql/pgqd.pid&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Então você deve iniciar o ticker:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;service&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;pgqd&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;start&lt;/pre&gt;&lt;pre&gt;# servide pgqd status&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;color: #04ff00;&quot;&gt;&lt;b&gt;●&lt;/b&gt;&lt;/span&gt; pgqd.service - PgQ maintenance daemon&lt;br /&gt;     Loaded: loaded (/lib/systemd/system/pgqd.service; enabled; vendor preset: enabled)&lt;br /&gt;     Active: &lt;span style=&quot;color: #04ff00;&quot;&gt;&lt;b&gt;active&lt;/b&gt;&lt;/span&gt; &lt;span style=&quot;color: #04ff00;&quot;&gt;&lt;b&gt;(running)&lt;/b&gt;&lt;/span&gt; since Mon 2023-07-24 14:07:52 -03; 47min ago&lt;br /&gt;   Main PID: 6949 (pgqd)&lt;br /&gt;      Tasks: 1 (limit: 2323)&lt;br /&gt;     Memory: 1.1M&lt;br /&gt;        CPU: 46ms&lt;br /&gt;     CGroup: /system.slice/pgqd.service&lt;br /&gt;             └─6949 /usr/bin/pgqd /etc/pgqd.ini&lt;br /&gt;&amp;nbsp;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Verificações&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Verifique se os bancos de dados foram criados com sucesso e estão acessíveis:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yeti-cdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;psql&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cdr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cdr&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;psql&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;9.4.5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SSL&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;connection&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cipher&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DHE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RSA&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AES256&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GCM&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SHA384&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s s-Name&quot;&gt;&quot;help&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;

&lt;span class=&quot;gp&quot;&gt;cdr=#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kp&quot;&gt;\q&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yeti-cdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/#&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Não se esqueça de fazer alterações em &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;/etc/postgresql/13/main/pg_hba.conf&lt;/span&gt;&lt;/b&gt; e aplicá-las se você planeja acessar esses bancos de dados de outros hosts e/ou configurar a replicação do banco de dados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;instalação da interface WEB&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;color: #2b00fe;&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Requisitos do servidor:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;A&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;rquitetura amd64&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Distribuição Debian 11 Bullseye;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;P&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;elo menos 4 GB de RAM&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-family: arial;&quot;&gt;. &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;Instalação de pacotes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;apt&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;update&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;apt&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-web&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;nginx
&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Configuração de conexão de bancos de dados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Para configurar os parâmetros de conexão de bancos de dados, crie o arquivo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;/opt/yeti-web/config/database.yml&lt;/span&gt;&lt;/b&gt; com o seguinte conteúdo:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;production&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;adapter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;postgresql&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;unicode&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;yeti&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;yeti&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;algumasenha&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;127.0.0.1&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;5432&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;schema_search_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&#39;gui,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;public,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;switch,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;billing,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;class4,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;runtime_stats,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;sys,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;logs,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;data_import&#39;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;min_messages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;notice&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;pool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;5&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;cdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;adapter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;postgresql&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;unicode&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;cdr&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;yeti&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;algumasenha&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;127.0.0.1&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;5432&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;schema_search_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&#39;cdr,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;reports,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;billing&#39;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;min_messages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;notice&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;pool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;migrations_paths&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;db/cdr_migrate&lt;/span&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Você deve especificar endereços e credenciais corretos que foram usados na seção anterior.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;color: #2b00fe;&quot;&gt;Configuração Yeti-web&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Copie o exemplo do arquivo de configuração &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;/opt/yeti-web/config/yeti_web.yml.distr&lt;/span&gt;&lt;/b&gt; para &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;/opt/yeti-web/config/yeti_web.yml&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;# cp -av /opt/yeti-web/config/yeti_web.yml.distr /opt/yeti-web/config/yeti_web.yml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;Inicialização da comunicação com os bancos de dados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Para inicializar bancos de dados vazios durante a instalação inicial:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/opt/yeti-web
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;su&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-s&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/bin/bash&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-web
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;RAILS_ENV&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;production&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;./bin/bundle.sh&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rake&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;db:schema:load&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;db:migrate
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;RAILS_ENV&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;production&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;./bin/bundle.sh&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rake&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;db:seed&lt;/pre&gt;&lt;pre&gt;yeti-web@yeti:~$ exit&lt;/pre&gt;&lt;pre&gt;root@yeti:/opt/yeti-web#&amp;nbsp;cd /&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Para atualizar os bancos de dados para a versão mais recente:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/opt/yeti-web
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;su&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-s&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/bin/bash&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-web
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;RAILS_ENV&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;production&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;./bin/bundle.sh&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rake&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;db:migrate&lt;/pre&gt;&lt;pre&gt;yeti-web@yeti:~$ exit&lt;/pre&gt;&lt;pre&gt;root@yeti:/opt/yeti-web#&amp;nbsp;cd /&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: #2b00fe; font-size: small;&quot;&gt;Configuração do Nginx&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Para configuração básica, remova a configuração padrão e copie yeti-web.dist.nginx:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;rm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/etc/nginx/sites-enabled/default
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;cp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/opt/yeti-web/config/yeti-web.dist.nginx&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/etc/nginx/sites-enabled/yeti
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;nginx&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t
&lt;span class=&quot;go&quot;&gt;nginx: the configuration file /etc/nginx/nginx.conf syntax is ok&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;nginx: configuration file /etc/nginx/nginx.conf test is successful&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;service&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;nginx&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;restart&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;span style=&quot;color: #04ff00;&quot;&gt;&lt;b&gt;● &lt;/b&gt;&lt;/span&gt;nginx.service - A high performance web server and a reverse proxy server&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Active: &lt;span style=&quot;color: #04ff00;&quot;&gt;&lt;b&gt;active (running)&lt;/b&gt;&lt;/span&gt; since Mon 2023-07-24 15:22:34 -03; 4s ago&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Docs: man:nginx(8)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process: 16821 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process: 16822 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)&lt;br /&gt;&amp;nbsp;&amp;nbsp; Main PID: 16823 (nginx)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tasks: 2 (limit: 2323)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memory: 2.6M&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPU: 15ms&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CGroup: /system.slice/nginx.service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├─16823 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └─16824 nginx: worker process&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Lançar&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Após a configuração bem-sucedida dos bancos de dados, você finalmente pode executar o software usando os seguintes comandos:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;service&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-web&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;start
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;service&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-cdr-billing@cdr_billing&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;start
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;service&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-cdr-billing@cdr_stats start
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;service&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-delayed-job&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;start
&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;service&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;yeti-scheduler&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;start&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Verificações&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Verifique se o puma escuta no soquete local:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;netstat&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-lpn&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;puma
&lt;span class=&quot;go&quot;&gt;unix 2 [ACC] STREAM OUVINDO 41901 16860/puma 6.2.1 (u /run/yeti/yeti-unicorn.sock)&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;verifique se o nginx escuta em endereços e portas TCP/IP corretos:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;go&quot; style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class=&quot;gp&quot;&gt;# &lt;/span&gt;netstat&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-lpn&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;nginx
&lt;span class=&quot;go&quot;&gt;tcp 0 0 127.0.0.1:6666 0.0.0.0:* OUÇA 16823/nginx: master&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;tcp 0 0   0.0.0.0:80   0.0.0.0:* OUÇA 16823/nginx: master&lt;/span&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Arquivos de log para verificar possíveis avisos/erros:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;go&quot; style=&quot;color: #2b00fe; font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;/var/log/yeti/yeti-web.log&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: small;&quot;&gt;/var/log/yeti/yeti-cdr-billing.log&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: small;&quot;&gt;/opt/yeti-web/log/puma.stdout.log&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;/opt/yeti-web/log/puma.stderr.log&lt;span class=&quot;go&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;HwtZe&quot; lang=&quot;pt&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;jCAhz ChMk0b&quot;&gt;&lt;span class=&quot;ryNqvb&quot;&gt;Tente abrir a interface de gerenciamento em seu navegador favorito e faça o login com as credenciais padrão:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;go&quot; style=&quot;font-family: arial;&quot;&gt;User: admin&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;go&quot; style=&quot;font-family: arial;&quot;&gt;Pass: 111111&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;go&quot; style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;i&gt;E por hoje é só&lt;/i&gt;, &lt;i&gt;pessoal&lt;/i&gt;!&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;Fonte:&amp;nbsp;&lt;a href=&quot;https://yeti-switch.org/&quot; target=&quot;_blank&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;a href=&quot;https://yeti-switch.org/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;go&quot; style=&quot;font-family: arial;&quot;&gt;https://yeti-switch.org/&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6423523936752890634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6423523936752890634'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/07/yeti-switch-softswitch-para-humanos.html' title='Yeti Switch - SOFTSWITCH PARA HUMANOS!!'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8VFgxBK1wl5NYTMAA_OBrdDPadEFb18cO6EPlr3IwO7gzj5QLXWUbTyxUDniVS1cfJD5rI6wqQOyJnR1BF2CzKAIU-LXazJ348-mqhTRY3jkXnQG96jUDj-CET73mj5cfjZKuvIK3mqTDBNemRGSnI4K1StjJJikILwLH9Y_bP2IirgC90vbTGMDr2c/s72-c/yeti-softswitch.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-333445651858301067</id><published>2023-07-03T10:29:00.003-10:00</published><updated>2023-07-03T10:29:43.139-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="PJSIP"/><title type='text'>Asterisk® SCF™ - PJSIP Negociação Avançada de CODEC</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT-fLa1ya5USHeP_S7NfmFyuoRuzzQB0qliRewtKM0h0M8gOE4Sa9K0lDapoAG_npggMPjmT0RXPEwAx_cX68W1fGVzJhoPWtSpL_sEDeL9t7IUYY1Ex1MZdRPqbQs0XbqlFUaUWmxmNuX7GzmXwDtaeTNVuRwj1b_cHQND5_veaEG3HK5b6g-AvfE9xkq/s1200/PJSIP%20Advanced%20CODEC%20Negotiation.jpg&quot; imageanchor=&quot;1&quot; style=&quot;font-family: arial; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;628&quot; data-original-width=&quot;1200&quot; height=&quot;334&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT-fLa1ya5USHeP_S7NfmFyuoRuzzQB0qliRewtKM0h0M8gOE4Sa9K0lDapoAG_npggMPjmT0RXPEwAx_cX68W1fGVzJhoPWtSpL_sEDeL9t7IUYY1Ex1MZdRPqbQs0XbqlFUaUWmxmNuX7GzmXwDtaeTNVuRwj1b_cHQND5_veaEG3HK5b6g-AvfE9xkq/w640-h334/PJSIP%20Advanced%20CODEC%20Negotiation.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;Prefácio&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Direct Media (Mídia Direta);&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;100rel/early media;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;re-INVITES;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Fax;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Multi-Stream (Transmissão Múltipla);&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Deferred SDP (Deferimento do SDP);&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;ARI Channel Operations (Operações do Canal ARI);&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Interoperabilidade com outros drivers de canal;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Função do Dialplan;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;etc.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Bem, ainda estamos trabalhando nisso.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Introdução&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Com o lançamento do&amp;nbsp;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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Arquitetura&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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&amp;nbsp;&lt;b&gt;stream a stream&lt;/b&gt;, mas vamos usar a &quot;&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;chamada de áudio simples&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&quot; como exemplo. A topologia conteria apenas um fluxo de &quot;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;áudio&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&quot;, mas esse fluxo poderia, é claro, permitir vários codecs.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Uma vez que o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;é um&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Agente de Usuário Back-2-Back&lt;/span&gt;&lt;/b&gt;, 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;envolvido. Com isso em mente, se&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;chama&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;,&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;negocia com o driver de&amp;nbsp;&lt;b&gt;canal de Alice&lt;/b&gt;, o driver de canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;negocia com o driver de&amp;nbsp;&lt;b&gt;canal de Bob&lt;/b&gt;&amp;nbsp;via CORE do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;, então o driver de canal de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;negocia com&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;. Diante disso, existem 4 pontos de controle onde podemos alterar o comportamento do processo de negociação...&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Depois de recebermos a oferta de&amp;nbsp;&lt;b&gt;SDP&lt;/b&gt;&amp;nbsp;de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;, mas antes de o driver enviar a oferta ao CORE do Asterisk® SCF™. (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;incoming_offer&lt;/b&gt;&lt;/span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Depois que o CORE do Asterisk® SCF™ enviou a oferta para o canal de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;, mas antes de enviarmos uma oferta&amp;nbsp;&lt;b&gt;SDP&lt;/b&gt;&amp;nbsp;para&lt;b&gt;&amp;nbsp;Bob&lt;/b&gt;. (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;outgoind_offer&lt;/span&gt;&lt;/b&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Depois de recebermos a resposta&amp;nbsp;&lt;b&gt;SDP&lt;/b&gt;&amp;nbsp;de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;, mas antes de enviá-la ao CORE do Asterisk® SCF™. (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;incoming_answer&lt;/span&gt;&lt;/b&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Após o CORE do Asterisk® SCF™&amp;nbsp;ter enviado a resposta para o canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;, mas antes de enviarmos uma resposta&amp;nbsp;&lt;b&gt;SDP&lt;/b&gt;&amp;nbsp;para&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;. (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;outgoing_answer&lt;/span&gt;&lt;/b&gt;).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Em todos esses casos, temos duas topologias que podemos alternar, uma &quot; pendente &quot;(pending) e uma &quot; configurada &quot; (configured), e várias operações de seleção e filtragem que podemos realizar nelas. O resultado é uma topologia &quot; resolvida &quot; (resolved). O processo de resolução é controlado por quatro parâmetros...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;prefer&lt;/span&gt;&lt;/b&gt;: Qual da lista de CODECs no stream nós preferimos? O pendente ou o configurado?&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;incoming_offer&lt;/span&gt;&lt;/b&gt;: Este é bastante óbvio.&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Pendente&lt;/span&gt;&lt;/b&gt;&amp;nbsp;é a topologia criada analisando a oferta do&amp;nbsp;&lt;b&gt;SDP de Alice&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Configurada&lt;/span&gt;&lt;/b&gt;&amp;nbsp;é aquela criada a partir da&amp;nbsp;&lt;b&gt;lista de CODECs&lt;/b&gt;&amp;nbsp;permitidos no terminal de Alice.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;output_offer&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;Este é um tanto óbvio.&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Pendente&lt;/span&gt;&lt;/b&gt;&amp;nbsp;é o resultado da resolução&amp;nbsp;&lt;b&gt;incoming_offer&lt;/b&gt;&amp;nbsp;&lt;b&gt;de Alice&lt;/b&gt;&amp;nbsp;que foi recebida do CORE do Asterisk® SCF™&amp;nbsp;e&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Configurado&lt;/span&gt;&lt;/b&gt;&amp;nbsp;é aquele criado a partir da&amp;nbsp;&lt;b&gt;lista de CODECs&lt;/b&gt;&amp;nbsp;permitidos no terminal de Bob.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;incoming_answer&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Este é menos óbvio.&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Pendente&amp;nbsp;&lt;/span&gt;&lt;/b&gt;é o resultado da análise da resposta&amp;nbsp;&lt;b&gt;SDP&lt;/b&gt;&amp;nbsp;&lt;b&gt;de Bob&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Configurado&lt;/span&gt;&lt;/b&gt;&amp;nbsp;é o que enviamos a&amp;nbsp;&lt;b&gt;Bob na oferta&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;outgoing_answer:&amp;nbsp;Este também é menos óbvio.&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Pendente&lt;/span&gt;&lt;/b&gt;&amp;nbsp;é o resultado da resolução&amp;nbsp;&lt;b&gt;incoming_answer de Bob&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Configurado&lt;/span&gt;&lt;/b&gt;&amp;nbsp;é o resultado da resolução&amp;nbsp;&lt;b&gt;incoming_offer de Alice&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Então, o que&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;prefer&lt;/span&gt;&lt;/b&gt;&amp;nbsp;realmente significa? Leia...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;operation&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Agora que sabemos qual topologia preferimos, que operação queremos realizar nelas?&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;union&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;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.&amp;nbsp;&lt;b&gt;Basicamente&lt;/b&gt;, estamos preservando a ordem da topologia preferida.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;intersect&lt;/span&gt;&lt;/b&gt;: Começamos com a lista preferida novamente, mas&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;descartamos&lt;/span&gt;&lt;/b&gt;&amp;nbsp;quaisquer CODECs que não estejam em ambas as listas. Isso mantém apenas os CODECs comuns enquanto&amp;nbsp;&lt;b&gt;preserva&lt;/b&gt;&amp;nbsp;a ordem da lista preferencial.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;only_preferred&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Apenas usamos a lista de&amp;nbsp;&lt;b&gt;preferidos&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;descartamos&lt;/b&gt;&lt;/span&gt;&amp;nbsp;completamente a lista de não preferidos.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;only_nonpreferred&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Apenas usamos a lista de&amp;nbsp;&lt;b&gt;não preferidos&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;descartamos&lt;/span&gt;&lt;/b&gt;&amp;nbsp;completamente a lista de preferidos.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;keep&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Agora que temos uma lista&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;filtrada&amp;nbsp;&lt;/span&gt;&lt;/b&gt;e&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;ordenada&lt;/span&gt;&lt;/b&gt;, o que guardamos dela?&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;all&lt;/span&gt;&lt;/b&gt;: Mantenha-os todos;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;first&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Passe apenas pelo&amp;nbsp;&lt;b&gt;primeiro&lt;/b&gt;&amp;nbsp;CODEC na lista resultante.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Transcode&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Finalmente,&amp;nbsp;&lt;b&gt;permitimos&lt;/b&gt;&amp;nbsp;a transcodificação ou&lt;b&gt;&amp;nbsp;não&lt;/b&gt;?&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;allow&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;Permite que a chamada prossiga mesmo se a lista resultante não tiver CODECs nela.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;prevent&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;&lt;b&gt;NÃO permite&lt;/b&gt;&amp;nbsp;que a chamada prossiga se a lista resultante não tiver CODECs nela.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Configuração&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;codec_prefs_incoming_offer;&lt;/li&gt;&lt;li&gt;codec_prefs_outgoing_offer;&lt;/li&gt;&lt;li&gt;codec_prefs_incoming_answer;&lt;/li&gt;&lt;li&gt;codec_prefs_outgoing_answer.&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Os parâmetros são especificados como pares &amp;lt;nome&amp;gt;:&amp;lt;valor&amp;gt; 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...&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Padrões de preferência de negociação de CODEC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;allow = !all,g722,ulaw&lt;br /&gt;codec_prefs_incoming_offer = prefer: pending, operation: union, keep: all, transcode: allow&lt;br /&gt;codec_prefs_outgoing_offer = prefer: pending, operation: intersect, keep: all, transcode: allow&lt;br /&gt;codec_prefs_outgoing_offer = prefer: pending, operation: union, keep: all, transcode: allow&lt;br /&gt;codec_prefs_outgoing_offer = prefer: pending, operation: union, keep: all, transcode: allow&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Você notará que os padrões sempre preferem a topologia &quot;pendente&quot;, portanto, em nosso exemplo, o que Alice envia em sua oferta SDP define o cenário.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial; font-size: 20px; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial; font-size: 20px; text-align: left;&quot;&gt;&lt;b&gt;Realmente Simples&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Vamos começar com uma chamada básica em que&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;são configurados com suas configurações padrão e ambos com um parâmetro &quot;&lt;b&gt;allow&lt;/b&gt;&quot; definido como &quot;&lt;b&gt;!all,ulaw,g722&lt;/b&gt;&quot;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;faz uma oferta =&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial; text-align: left;&quot;&gt;Asterisk® SCF™ =&amp;gt;&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Alice envia um INVITE com uma oferta SDP contendo&amp;nbsp;&lt;b&gt;ulaw&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;g722&lt;/b&gt;&amp;nbsp;nessa ordem.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;resolve essa topologia com os codecs configurados de seu endpoint e as preferências de&amp;nbsp;&lt;b&gt;incoming_offer&lt;/b&gt;.&amp;nbsp;Como preferimos&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Pendentes&lt;/b&gt;&lt;/span&gt;&amp;nbsp;e a operação é&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;union&lt;/span&gt;&lt;/b&gt;&amp;nbsp;(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.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;então envia a chamada para o CORE do Asterisk® SCF™&amp;nbsp;junto com a topologia resolvida.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O CORE do Asterisk® SCF™ invoca o dialplan que cria o canal de saída de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;e encaminha a topologia resolvida para ele.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;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&amp;nbsp;&lt;b&gt;output_offer&lt;/b&gt;. A única diferença entre suas preferências e as de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;é a operação. Como ambas as topologias já são iguais, o resultado ainda é ulaw,g722.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Com base nisso, o canal de&lt;b&gt;&amp;nbsp;Bob&lt;/b&gt;&amp;nbsp;cria um&amp;nbsp;&lt;b&gt;INVITE&lt;/b&gt;&amp;nbsp;de saída com uma oferta SDP contendo&amp;nbsp;&lt;b&gt;ulaw,g722&amp;nbsp;&lt;/b&gt;nessa ordem.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;aceita a oferta =&amp;gt;&amp;nbsp;Asterisk® SCF™ =&amp;gt;&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;responde a oferta com uma resposta do tipo&amp;nbsp;&lt;b&gt;SDP&lt;/b&gt;&amp;nbsp;contendo apenas ulaw.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;resolve a topologia de resposta recebida (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pendente&lt;/span&gt;&lt;/b&gt;) com a topologia enviada para&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;(&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;configurada&lt;/span&gt;&lt;/b&gt;) que tem&lt;b&gt;&amp;nbsp;ulaw,g722&lt;/b&gt;&amp;nbsp;e as preferências de resposta recebida de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;. Como a operação é&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;union&lt;/span&gt;&lt;/b&gt;&amp;nbsp;(união), a topologia resolvida contém apenas ulaw.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O driver de canal de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;passa a topologia resolvida de volta ao CORE do Asterisk® SCF™, pois indica que a chamada está sendo atendida (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;answered&lt;/span&gt;&lt;/b&gt;).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O CORE do Asterisk® SCF™&amp;nbsp;passa a topologia resolvida de volta para o canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;, uma vez que informa que&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;respondeu (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;answered&lt;/span&gt;&lt;/b&gt;).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&lt;b&gt;&amp;nbsp;Alice&lt;/b&gt;&amp;nbsp;resolve a topologia do CORE do Asterisk® SCF™&amp;nbsp;(&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pendente&lt;/span&gt;&lt;/b&gt;), com a topologia que originalmente enviou para o CORE do Asterisk® SCF™&amp;nbsp;(&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;configurado&lt;/span&gt;&lt;/b&gt;) que tinha&amp;nbsp;&lt;b&gt;ulaw,g722&lt;/b&gt;&amp;nbsp;e as preferências de&amp;nbsp;&lt;b&gt;outgoing_answer de Alice&lt;/b&gt;. Novamente, como a operação é union (união), a topologia resolvida contém apenas ulaw.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;então envia a resposta SDP de volta para&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;com apenas ulaw.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Nesta chamada, Alice deu o tom para a chamada.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Uma mudança na ordem&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Sabemos que os telefones de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;podem suportar&amp;nbsp;&lt;b&gt;g722&lt;/b&gt;, mas seus telefones sempre listam&lt;b&gt;&amp;nbsp;ulaw primeiro&lt;/b&gt;. Então, como podemos fazê-los usar o&amp;nbsp;&lt;b&gt;g722&lt;/b&gt;? Vamos fazer algumas alterações de configuração...&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Começamos alterando as preferências de oferta de entrada de Alice para preferir a topologia configurada em vez da pendente.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;codec_prefs_incoming_offer&lt;/span&gt;&lt;/b&gt;&amp;nbsp;= prefer: configured, operation: union, keep: all, transcode: allow&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Em seguida, configuramos os CODECs de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;para g722,ulaw.&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;allow&amp;nbsp;&lt;/span&gt;&lt;/b&gt;=&amp;nbsp;!all,g722,ulaw&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Agora vamos ligar...&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;faz uma oferta =&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial; text-align: left;&quot;&gt;Asterisk® SCF™ =&amp;gt;&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;envia um INVITE com uma oferta SDP contendo&lt;b&gt;&amp;nbsp;ulaw&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;g722&lt;/b&gt;&amp;nbsp;nessa ordem.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;resolve essa topologia (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pendente&lt;/span&gt;&lt;/b&gt;) com os CODECs configurados de seu terminal (g722,ulaw) e as preferências de&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;incoming_offer&lt;/span&gt;&lt;/b&gt;. Como preferimos&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;configurado&lt;/span&gt;&lt;/b&gt;&amp;nbsp;e a operação é union (união), o resultado do primeiro estágio agora é g722,ulaw.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O restante da chamada flui como antes, exceto que&amp;nbsp;&lt;b&gt;g722,ulaw&lt;/b&gt;&amp;nbsp;é a topologia&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pendente&lt;/span&gt;&lt;/b&gt;. Pode haver um &quot; gotcha &quot; (&lt;b&gt;te peguei)&lt;/b&gt;. A RFC3264 afirma que um agente de usuário que recebe uma oferta&amp;nbsp;&lt;b&gt;NÃO DEVE&lt;/b&gt;&amp;nbsp;alterar a ordem dos codecs ao criar sua resposta. Não diz que&amp;nbsp;&lt;b&gt;NÃO DEVE&lt;/b&gt;&amp;nbsp;alterar o pedido. Portanto, é possível, embora altamente improvável, que&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;possa responder a&amp;nbsp;&lt;b&gt;g722,ulaw&lt;/b&gt;&amp;nbsp;com&amp;nbsp;&lt;b&gt;ulaw,g722&lt;/b&gt;. Se for esse o caso, você pode forçar&lt;b&gt;&amp;nbsp;Bob&lt;/b&gt;&amp;nbsp;a usar&amp;nbsp;&lt;b&gt;g722&lt;/b&gt;&amp;nbsp;definindo seu parâmetro de manutenção de&amp;nbsp;&lt;b&gt;outgoing_offer&lt;/b&gt;&amp;nbsp;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. 😂&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Transcodificação&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Isso é onde fica complicado...&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Digamos que o terminal de&lt;b&gt;&amp;nbsp;Alice&lt;/b&gt;&amp;nbsp;esteja configurado apenas com&amp;nbsp;&lt;b&gt;alaw&lt;/b&gt;&amp;nbsp;como CODEC, mas ela envia apenas&amp;nbsp;&lt;b&gt;ulaw,g722&lt;/b&gt;. Se a topologia resolvida estiver vazia, como seria se a operação fosse union (união), a chamada é encerrada imediatamente com um&amp;nbsp;&lt;b&gt;488 Not Acceptable Here&lt;/b&gt;. Não importa qual é o parâmetro de transcodificação definido porque, neste ponto, nem sabemos qual é o canal de saída.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Agora vamos supor que o endpoint de&lt;b&gt;&amp;nbsp;Alice&lt;/b&gt;&amp;nbsp;tenha&amp;nbsp;&lt;b&gt;ulaw,g722&lt;/b&gt;. Como o terminal dela também tinha&amp;nbsp;&lt;b&gt;ulaw,g722&lt;/b&gt;, nós o enviamos para o CORE do Asterisk® SCF™. O endpoint de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;, no entanto, tinha apenas um CODEC, alaw!&amp;nbsp;E sua operação era union (união). Isso resultaria em uma topologia&amp;nbsp;&lt;b&gt;resolvida&lt;/b&gt;&amp;nbsp;vazia. Para que a transcodificação seja considerada, o parâmetro de transcodificação de&amp;nbsp;&lt;b&gt;incoming_offer&lt;/b&gt;&amp;nbsp;de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;e o parâmetro de transcodificação de outgoing_offer&amp;nbsp;de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;DEVEM ser configurados para permitir. Se um deles for &quot;impedir&quot;, a chamada será encerrada. Se ambos forem permitidos, enviaremos uma oferta a&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;com alaw como CODEC.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Se&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;responder sem CODECs, a chamada será encerrada. Novamente, porém, você provavelmente não deveria ter configurado o endpoint de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;com um CODEC não suportado. Caso contrário, a topologia resolvida (alaw) é passada de volta para o CORE do Asterisk® SCF™.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;obtém a topologia do núcleo (&lt;u style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;pendente&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;) e a resolve em relação ao que foi enviado ao CORE do Asterisk® SCF™ (configurado) e às preferências de&amp;nbsp;&lt;b&gt;outgoing_answer&lt;/b&gt;&amp;nbsp;de seu terminal. Se a topologia resultante estiver vazia, como seria neste caso, o parâmetro de transcodificação&amp;nbsp;&lt;b&gt;output_answer&lt;/b&gt;&amp;nbsp;será verificado. Se for permitido, o canal usará a topologia originalmente enviada ao CORE do Asterisk® SCF™&amp;nbsp;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.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Implementação nos bastidores&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;A implementação antiga tinha negociação de CODEC espalhada por&amp;nbsp;&lt;b&gt;chan_pjsip&lt;/b&gt;,&amp;nbsp;&lt;b&gt;res_pjsip_session&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;res_pjsip_sdp_rtp&lt;/b&gt;. A ACN tenta consolidar toda a negociação de CODECs em&amp;nbsp;&lt;b&gt;chan_pjsip&lt;/b&gt;, mas ainda há resquícios nos outros módulos que precisarão ser refatorados. Um bom exemplo é a função &quot;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;set_caps&lt;/span&gt;&lt;/b&gt;&quot; em&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;res_pjsip_sdp_rtp&lt;/span&gt;&lt;/b&gt;. 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&amp;nbsp;&lt;b&gt;res_pjsip&lt;/b&gt;&amp;nbsp;são reutilizadas e não têm ideia do contexto em que são executadas. Por exemplo,&amp;nbsp;&lt;b&gt;apply_negotiated_sdp&lt;/b&gt;&amp;nbsp;é executado para respostas recebidas e enviadas (é assim que&amp;nbsp;&lt;b&gt;set_caps&lt;/b&gt;&amp;nbsp;é executado duas vezes). De qualquer forma...&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Alice&lt;/b&gt;&amp;nbsp;faz uma oferta =&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial; text-align: left;&quot;&gt;Asterisk® SCF™ =&amp;gt;&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;incoming_offer&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;Isso é tratado em&amp;nbsp;&lt;b&gt;chan_pjsip&lt;/b&gt;:&lt;b&gt;chan_pjsip_incoming_request( )&lt;/b&gt;&amp;nbsp;antes que o canal seja realmente criado. Essa função é chamada por sessão por meio do suplemento&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;handle_incoming_request&lt;/span&gt;&lt;/b&gt;. A função resolve a topologia criada a partir da oferta de&lt;b&gt;&amp;nbsp;Alice&lt;/b&gt;&amp;nbsp;com os parâmetros e CODECs do endpoint e do endpoint de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;. 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&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;chan_pjsip_new&lt;/span&gt;&lt;/b&gt;, que define a topologia no canal junto com os limites de formato nativo e os formatos de leitura e gravação.&amp;nbsp;&lt;b&gt;NOTA&lt;/b&gt;: Não definimos os CODECs de instância&amp;nbsp;&lt;b&gt;RTP&lt;/b&gt;&amp;nbsp;aqui, mas deveríamos. Se a resolução falhar, terminamos com um&amp;nbsp;&lt;b&gt;488&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Eventualmente, trabalhamos até&amp;nbsp;&lt;b&gt;app_dial&lt;/b&gt;:&lt;b&gt;dial_exec_full&lt;/b&gt;, que cria o canal de saída de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;com&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;ast_request_with_stream_topology( )&lt;/span&gt;&lt;/b&gt;&amp;nbsp;passando na topologia do canal de&lt;b&gt;&amp;nbsp;Alice&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;strong style=&quot;background-color: white; text-align: left;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;outgoing_offer&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: white; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;ast_request_with_stream_topology( )&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;chama&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;chan_pjsip_request_with_stream_topology( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;. Em seguida, isso resolve a topologia de solicitação (pendente) com os parâmetros&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;output_offer&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;do endpoint de&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;Bob&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;e os CODECs de endpoint do endpoint de&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;Bob&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;. Supondo que existam fluxos ativos deixados na topologia, a função chama&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;chan_pjsip_new( )&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;que define a topologia do canal de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;, limites de formato nativo e formatos de leitura/gravação. Mesma observação acima, devemos definir os CODECs de instância&amp;nbsp;&lt;b&gt;RTP&lt;/b&gt;&amp;nbsp;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&amp;nbsp;&lt;b&gt;AST_CAUSE_FAILURE&lt;/b&gt;&amp;nbsp;para&amp;nbsp;&lt;b&gt;app_dial&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;bail&lt;/b&gt;, o que faz com que um&amp;nbsp;&lt;b&gt;503&lt;/b&gt;&amp;nbsp;seja enviado para&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b style=&quot;color: #333333;&quot;&gt;dial_exec_full&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;finalmente chama&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;chan_pjsip_call( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;cuja tarefa&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;call( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;chama&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;ast_sip_session_create_invite( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;então&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;ast_sip_session_send)request( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;aceita a oferta =&amp;gt;&amp;nbsp;Asterisk® SCF™ =&amp;gt;&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;strong style=&quot;background-color: white; text-align: left;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;incoming_answer&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: white; color: #333333; text-align: left;&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Quando&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;envia um&amp;nbsp;&lt;b&gt;200OK&lt;/b&gt;,&amp;nbsp;&lt;b&gt;pjproject&lt;/b&gt;&amp;nbsp;chama nosso&amp;nbsp;&lt;b&gt;callback&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;session_inv_on_media_update( )&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;que então chama&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;res_pjsip_session&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;handle_negotiated_sdp( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;. Isso define a topologia ativa para aquela recebida de&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;Bob&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;. Eventualmente,&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;&amp;nbsp;pjproject&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;sinaliza uma mudança de estado de transação com base no recebimento de&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;200OK&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;, que aciona os suplementos&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;handle_incoming_response&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;da sessão, um dos quais é&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;chan_pjsip_incoming_response_after_media( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;. Isso resolve a topologia ativa que veio de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;, com a topologia que enviamos a&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;&amp;nbsp;usando as preferências de resposta recebida do endpoint de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;. A função então chama&amp;nbsp;&lt;b&gt;ast_queue_control_data&lt;/b&gt;&amp;nbsp;com um tipo de quadro&amp;nbsp;&lt;b&gt;AST_CONTROL_ANSWER&lt;/b&gt;&amp;nbsp;e a topologia resolvida como os dados.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b style=&quot;color: #333333;&quot;&gt;app_dial&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;wait_for_answer( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;recebe o quadro&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;ANSWER&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;e coloca a topologia na estrutura de configuração da ponte. Isso é passado para&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: #333333;&quot;&gt;features&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;ast_bridge_call( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;e para baixo para&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pre_bridge_setup( )&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;que chama&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;ast_raw_answer_with_stream_topology( )&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;. Isso, por sua vez, chama&amp;nbsp;&lt;b&gt;chan_pjsip_answer_with_stream_topology&lt;/b&gt;&amp;nbsp;no canal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;output_answer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: a tarefa de resposta de&amp;nbsp;&lt;b&gt;chan_pjsip_answer_with_stream_topology&lt;/b&gt;&amp;nbsp;faz a resolução final usando a topologia ativa de&amp;nbsp;&lt;b&gt;Bob&lt;/b&gt;, a topologia&amp;nbsp;&lt;b&gt;pendente de Alice&lt;/b&gt;&amp;nbsp;que foi originalmente enviada para o CORE do Asterisk® SCF™&amp;nbsp;e os parâmetros de&amp;nbsp;&lt;b&gt;output_answer&lt;/b&gt;&amp;nbsp;do terminal de&amp;nbsp;&lt;b&gt;Alice&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;Fonte:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;a href=&quot;https://wiki.asterisk.org/wiki/dashboard.action&quot; style=&quot;--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;&quot; target=&quot;_blank&quot;&gt;https://wiki.asterisk.org/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;Por:&amp;nbsp;&lt;a href=&quot;https://wiki.asterisk.org/wiki/display/~gjoseph&quot; style=&quot;--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;&quot; target=&quot;_blank&quot;&gt;George Joseph&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--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: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;span style=&quot;--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;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/333445651858301067/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/333445651858301067' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/333445651858301067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/333445651858301067'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/07/asterisk-scf-pjsip-negociacao-avancada.html' title='Asterisk® SCF™ - PJSIP Negociação Avançada de CODEC'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT-fLa1ya5USHeP_S7NfmFyuoRuzzQB0qliRewtKM0h0M8gOE4Sa9K0lDapoAG_npggMPjmT0RXPEwAx_cX68W1fGVzJhoPWtSpL_sEDeL9t7IUYY1Ex1MZdRPqbQs0XbqlFUaUWmxmNuX7GzmXwDtaeTNVuRwj1b_cHQND5_veaEG3HK5b6g-AvfE9xkq/s72-w640-h334-c/PJSIP%20Advanced%20CODEC%20Negotiation.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-5637633405271959085</id><published>2023-07-03T05:53:00.003-10:00</published><updated>2023-07-03T05:54:33.487-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="PJSIP"/><title type='text'>Asterisk® SCF™ - Utilizando PJSIP como Proxy</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNhcgWnE2Nez_TWvfG5Q0fVPWDxlOzswq9s7N36qYZziS1_yAIVZqT7pfZhpNkX_QBUKX1hkmjCjC3OZTsslsXsffysui2s5iSKohOYkmWKwDg7Qas3tpKUSDQNClhZFULgsUFzFSDvM0e7NFA4I1DaXRtVzHSCRaEcZOxbSDzN9Ri8NmS-eSe43CKJcn/s1200/image4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;628&quot; data-original-width=&quot;1200&quot; height=&quot;334&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNhcgWnE2Nez_TWvfG5Q0fVPWDxlOzswq9s7N36qYZziS1_yAIVZqT7pfZhpNkX_QBUKX1hkmjCjC3OZTsslsXsffysui2s5iSKohOYkmWKwDg7Qas3tpKUSDQNClhZFULgsUFzFSDvM0e7NFA4I1DaXRtVzHSCRaEcZOxbSDzN9Ri8NmS-eSe43CKJcn/w640-h334/image4.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Existe muitos cenários de proxy diferentes nos quais o&amp;nbsp;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&amp;nbsp;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).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Outbound Proxy (Proxy de Saída)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Assumiremos que o ITSP exige que o&amp;nbsp;&lt;span&gt;Asterisk® SCF™ se registre para receber chamadas. Claro, mesmo com o&amp;nbsp;&lt;/span&gt;&lt;span&gt;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&lt;/span&gt;&lt;span&gt;® 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&lt;/span&gt;&lt;span&gt;®. 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&amp;nbsp;&lt;/span&gt;&lt;span&gt;Asterisk® SCF™ (atuando como um Softswitch PBX IP).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span&gt;&lt;b&gt;Configuração do&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;Asterisk® SCF™&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Existem vários objetos PJSIP que precisam ser configurados para esta situação.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;transport&lt;/span&gt;&lt;/b&gt;: 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&amp;nbsp;&lt;b&gt;external_signalling_address&lt;/b&gt;,&amp;nbsp;&lt;b&gt;external_media_address&lt;/b&gt;,&amp;nbsp;&lt;b&gt;local_net&lt;/b&gt;, 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.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;div&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;Examplo:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;[ipv4-udp]&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;type = transport&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;protocol = udp&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;bind = 0.0.0.0:5060&lt;/code&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;endpoint&lt;/span&gt;&lt;/b&gt;: 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&amp;nbsp;&lt;b&gt;force_rport&lt;/b&gt;,&amp;nbsp;&lt;b&gt;ice_support&lt;/b&gt;, etc.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;div&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;Examplo:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;[myitsp]&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;type = aor&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;contact = sip:my.itsp.com:5060&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;&lt;code&gt;outbound_proxy = sip:192.168.0.1\;lr&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;qualify_frequency = 60&lt;/code&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;registration&lt;/span&gt;&lt;/b&gt;: 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.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;div&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;Examplo:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;[myitsp]&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;type = registration&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;client_uri = sip:my_account@my.itsp.com&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;server_uri = sip:my.itsp.com&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;outbound_proxy = sip:192.168.0.1\;lr&lt;/code&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;identify&lt;/span&gt;&lt;/b&gt;: 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&amp;nbsp;&lt;b&gt;CallerID&lt;/b&gt;&amp;nbsp;do originador/chamador como o usuário do cabeçalho&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;FROM:&lt;/span&gt;&lt;/b&gt;&amp;nbsp;(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&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;match = my.itsp.com&lt;/span&gt;&lt;/b&gt;. 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.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;Examplo:&lt;/span&gt;&lt;/div&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;[myitsp]&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;type = identify&lt;/code&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;match = 192.168.0.1&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;endpoint = myitsp&lt;/code&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Você deve ter notado que os URIs do proxy têm o parâmetro &quot;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;lr&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&quot; adicionado. Isso ocorre porque a maioria dos proxies hoje em dia segue o&amp;nbsp;&lt;b&gt;RFC 3261&lt;/b&gt;&amp;nbsp;e, portanto, tem &quot;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;loose-routing&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&quot; (roteamento flexível). Se você não o tiver definido, provavelmente receberá uma reposta&amp;nbsp;&lt;b&gt;404&lt;/b&gt;&amp;nbsp;do proxy. O objeto &quot;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;\&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&quot; 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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Bom, nesse ponto, você deve ter um tronco com sua ITSP funcionando para chamadas de Inbound (entradas) e Outbound (saídas).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Direct Media&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Se o seu proxy for compatível, você poderá ativar a mídia direta entre os telefones e o proxy definindo&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;direct_media = yes&lt;/span&gt;&lt;/b&gt;&amp;nbsp;no telefone (device) e nos terminais (endpoint) da ITSP. O proxy deve cuiadar&amp;nbsp; do resto. Tentar fazer mídia direta, diretamente entre os telefones (devices) e o terminais (endpoints) da ITSP provavelmente não funcionará.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Multiplas ITSPs&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Há um pequeno problema com a configuração acima se você tiver mais de&amp;nbsp;&lt;b&gt;1 tronco ITSP&amp;nbsp;&lt;/b&gt;por meio do proxy. Na configuração acima, o objeto de identificação é usado para direcionar solicitações recebidas do proxy&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;para um único endpoint&lt;/span&gt;&lt;/b&gt;&amp;nbsp;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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Veja como funciona&lt;/span&gt;&lt;/b&gt;: Quando você especifica&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;line = true&lt;/span&gt;&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;endpoint = &amp;lt;endpoint&amp;gt;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;em um registro, o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;acrescenta um parâmetro &quot;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;line&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&quot; ao URI de contato do&amp;nbsp;&lt;b&gt;REGISTER&lt;/b&gt;&amp;nbsp;de saída que contém uma string exclusiva. Ficará assim: &quot;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Contact: &amp;lt;sip:s@192.168.0.2.245:5060;line=eylpkkv&amp;gt;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&quot;.&amp;nbsp;&lt;b&gt;Se a sua ITSP suportar&lt;/b&gt;, quando enviar uma solicitação INVITE para o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;, ele incluirá o parâmetro &quot;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;line&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&quot; no Request URI ou no cabeçalho To da seguinte forma: &quot;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;INVITE sip:8005551212@192.168.0.2:5060;line=eylpkkv SIP/2.0&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&quot; . O&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;então usará essa string única para corresponder a solicitação ao endpoint especificado no registro.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;Examplo:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;[myitsp]&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;type = registration&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;client_uri = sip:my_account@&lt;a class=&quot;external-link&quot; href=&quot;http://my.itsp.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #192e84; text-decoration-line: none;&quot;&gt;my.itsp.com&lt;/a&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;server_uri = sip:&lt;a class=&quot;external-link&quot; href=&quot;http://my.itsp.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #192e84; text-decoration-line: none;&quot;&gt;my.itsp.com&lt;/a&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;outbound_proxy = sip:192.168.0.1&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;&lt;code&gt;line = yes&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;&lt;code&gt;endpoint = myitsp&lt;/code&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;Header Matching (Correspondência de Cabeçalho)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Algumas ITSPs incluem cabeçalhos &quot; X- &quot; em suas solicitações que contêm números de contas ou outras informações de identificação. O&amp;nbsp;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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;Examplo:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;[myitsp]&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;type = identify&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;match_header = X-My-Account-Number: 12345678&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;endpoint = myitsp&lt;/code&gt;&lt;span face=&quot;&amp;quot;helvetica neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;b&gt;Inbound Proxy (Proxy de Entrada)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Em um cenário de provedor de serviços (ITSP), o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Fonte:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;https://wiki.asterisk.org/wiki/dashboard.action&quot; target=&quot;_blank&quot;&gt;https://wiki.asterisk.org/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Por&amp;nbsp;&lt;a href=&quot;https://wiki.asterisk.org/wiki/display/~gjoseph&quot; target=&quot;_blank&quot;&gt;George Joseph&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/5637633405271959085/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/5637633405271959085' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/5637633405271959085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/5637633405271959085'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2023/07/asterisk-scf-utilizando-pjsip-como-proxy.html' title='Asterisk® SCF™ - Utilizando PJSIP como Proxy'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNhcgWnE2Nez_TWvfG5Q0fVPWDxlOzswq9s7N36qYZziS1_yAIVZqT7pfZhpNkX_QBUKX1hkmjCjC3OZTsslsXsffysui2s5iSKohOYkmWKwDg7Qas3tpKUSDQNClhZFULgsUFzFSDvM0e7NFA4I1DaXRtVzHSCRaEcZOxbSDzN9Ri8NmS-eSe43CKJcn/s72-w640-h334-c/image4.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-6261665548360426807</id><published>2022-12-13T04:30:00.001-10:00</published><updated>2022-12-13T04:30:42.306-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Asterisk® SCF™ Aplicativo: sendDTMF( )</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLS_m-oj5sGz8d3B4elTAppKLCi180upoehl_xLZZXYA-P5eMpVbTVd3mc-IOt_LzWMp84EzJFDJ6356XJvVL8sy-l-DykkISThwnilWyzZ5KWUZVyNaB402uIuL1_G0YwxBVorL4C5hOjp5T1zyZwdFj3u-NqO_JCk6C03f6jTtZLvDfpJ39UFYP9/s375/DTMF-keypad-frequencies.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;227&quot; data-original-width=&quot;375&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLS_m-oj5sGz8d3B4elTAppKLCi180upoehl_xLZZXYA-P5eMpVbTVd3mc-IOt_LzWMp84EzJFDJ6356XJvVL8sy-l-DykkISThwnilWyzZ5KWUZVyNaB402uIuL1_G0YwxBVorL4C5hOjp5T1zyZwdFj3u-NqO_JCk6C03f6jTtZLvDfpJ39UFYP9/s320/DTMF-keypad-frequencies.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;O Aplicativo de Dialplan do Asterisk® SCF™: sendDTMF( ), envia uma sequencia especificada de tons DTMF em um canal.&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Descrição&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Envia a sequencia especificada de dígitos para o canal.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Sintaxe&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;sendDTMF&lt;span style=&quot;color: red;&quot;&gt;(&lt;/span&gt;&lt;/b&gt;dígitos&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;b&gt;[&lt;/b&gt;&lt;/span&gt;,timeout_ms&lt;b&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;[&lt;/span&gt;&lt;/b&gt;,duration-ms&lt;b&gt;&lt;span style=&quot;color: #ff00fe;&quot;&gt;[&lt;/span&gt;&lt;/b&gt;,canal&lt;b&gt;&lt;span style=&quot;color: #ff00fe;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Argumentos&lt;/b&gt;&lt;/p&gt;&lt;p&gt;dígitos - números ou símbolos suportados&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;0 - 9&amp;nbsp; &lt;/span&gt;&lt;/b&gt;- números&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;* #&lt;/b&gt;&lt;/span&gt; &amp;nbsp;&amp;nbsp; - os caracteres especiais * e #&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;&amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;a - d&lt;/b&gt;&lt;/span&gt;&amp;nbsp; - letras latinas minúsculas de a a d&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;A - D&lt;/b&gt;&lt;/span&gt; - letras latinas maiusculas de A a D&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;w &amp;nbsp;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; - pausa (wait) de 0,5 segundos&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;W&lt;/b&gt;&lt;/span&gt; &amp;nbsp;&amp;nbsp; - pausa (wait) de 1 segundo&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt; F&lt;/b&gt;&lt;/span&gt; &amp;nbsp; &amp;nbsp; - flash gancho se suportado pelo canal&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;timeout_ms&lt;/b&gt;&lt;/span&gt; - intervalo entre os sinais DTMF - por padrão são de 0,25 segundos.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;duration_ms&lt;/b&gt;&lt;/span&gt; - duração de cada dígito.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;canal&lt;/span&gt;&lt;/b&gt; - o canal para onde os dígitos devem ser enviados.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;b&gt;Observação&lt;/b&gt;: O Aplicativo de Dialplan do &lt;/span&gt;Asterisk® SCF™ Dial( ), com o parâmetro &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;D &lt;/span&gt;&lt;/b&gt;também pode enviar sequencias DTMF.&lt;/p&gt;&lt;p&gt;Exemplo&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;O assinante faz a marcação do prefixo 001 e o número chamado.&amp;nbsp;&lt;/p&gt;&lt;p&gt;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).&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;[from-internal]
exten =&amp;gt; _001X.,1,noop
   same =&amp;gt; n,answer
   same =&amp;gt; n,mset(num=${EXTEN:3},pin=1234567,cardnum=6666666)
   same =&amp;gt; n,Dial(PJSIP/${cardnum}@pjsip_trunk,,U(sub-card^${pin}^${num}))
[sub-card]
exten =&amp;gt;  s,1,senddtmf(W${ARG1}w${ARG2}#,,,)
   same =&amp;gt; n,return&lt;/pre&gt;&lt;p&gt;Fonte: &lt;a href=&quot;https://wiki.asterisk.org/wiki/display/AST/Asterisk+11+Application_SendDTMF&quot; target=&quot;_blank&quot;&gt;Asterisk® Documentation&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/6261665548360426807/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/6261665548360426807' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6261665548360426807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6261665548360426807'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2022/12/asterisk-scf-aplicativo-senddtmf.html' title='Asterisk® SCF™ Aplicativo: sendDTMF( )'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLS_m-oj5sGz8d3B4elTAppKLCi180upoehl_xLZZXYA-P5eMpVbTVd3mc-IOt_LzWMp84EzJFDJ6356XJvVL8sy-l-DykkISThwnilWyzZ5KWUZVyNaB402uIuL1_G0YwxBVorL4C5hOjp5T1zyZwdFj3u-NqO_JCk6C03f6jTtZLvDfpJ39UFYP9/s72-c/DTMF-keypad-frequencies.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-4264696651975436750</id><published>2022-09-15T07:37:00.001-10:00</published><updated>2022-09-15T07:39:52.182-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Asterisk Module and Build Option Selection - XXX cel_pgsql</title><content type='html'>&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt; 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 &lt;b&gt;Asterisk Module and Build Option Selection&lt;/b&gt; identifica-se o &lt;b&gt;PGSQL(E) &lt;/b&gt;para o modulo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;cdr_pgsql&lt;/b&gt;&lt;/span&gt; e &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;cel_pgsql&lt;/b&gt;&lt;/span&gt;. Observe a imagem a seguir:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;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&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1053&quot; data-original-width=&quot;1913&quot; height=&quot;352&quot; src=&quot;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&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Para entender o que está ocorrendo, entre no fonte do Asterisk® SCF™ e execute o teste pelo script &lt;b&gt;install_prereq&lt;/b&gt;:&lt;/p&gt;&lt;p&gt;# &lt;b&gt;cd /usr/local/src/asterisk-13.35.0/&lt;/b&gt;&lt;/p&gt;&lt;p&gt;# &lt;b&gt;contrib/scripts/install_prereq test&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Neste caso, que estamos expondo, a resposta foi essa:&lt;/p&gt;&lt;p&gt;yum install --skip-broken --assumeyes speexdsp-devel &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;postgresql-devel&lt;/b&gt;&lt;/span&gt; mysql-devel iksemel-devel hoard gmime.x86_64 gmime-devel.x86_64&amp;nbsp;&lt;/p&gt;&lt;p&gt;Observe que entre a resposta do teste, esta sendo informado que &lt;b&gt;postgresql-devel&lt;/b&gt; não foi encontrado para atender os módulos do Asterisk® SCF™.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Executando o comando do RPM para validar os pacotes instalados obtemos a seguinte resposta:&lt;/p&gt;&lt;p&gt;# &lt;b&gt;rpm -qa | grep postgres &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;postgresql11-libs-11.13-1PGDG.rhel7.x86_64 &lt;br /&gt;postgresql11-server-11.13-1PGDG.rhel7.x86_64 &lt;br /&gt;postgresql11-devel-11.13-1PGDG.rhel7.x86_64 &lt;br /&gt;postgresql11-11.13-1PGDG.rhel7.x86_64 &lt;br /&gt;postgresql11-contrib-11.13-1PGDG.rhel7.x86_64&lt;/p&gt;&lt;p&gt;Ou seja, temos o PostgreSQL 11 instalado, e logo sabemos que o PostgreSQL11-Devel se encontra instalado, mas o&amp;nbsp; 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:&lt;/p&gt;&lt;p&gt;# &lt;b&gt;psql --version | awk &#39;{print $3}&#39; | awk -F &#39;.&#39; &#39;{print $1}&#39;&lt;/b&gt;&lt;br /&gt;11&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Obtivemos o resultado sendo 11, então execute o configure para essa versão do postgresql-devel, deste modo:&lt;/p&gt;&lt;p&gt;# &lt;b&gt;./configure --prefix=/usr --with-postgres=/usr/pgsql-11/.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Entre novamente no Menu Select do Asterisk Module and Build Option Selection:&lt;/p&gt;&lt;p&gt;# &lt;b&gt;make menuselect&lt;/b&gt;&lt;/p&gt;&lt;p&gt;E observe que agora temos os modulos ativos para serem copilados, veja as figuras a seguir:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDhlAy2uPFo78lmRNLXJh77izE0XqDpVlxiiae0ZrxNO1Kh3QyIHbPpCbc1KqKD5IvlxEZBX2CPvQpExVeFdg6i47WWna8DvGYzOT2K5WjqRnNXP79oGKFgZ03PSXyXCGqeFqg5GCad3lWyLyKxhOhzYsq30Dc04M6SpUmakKSpSMrAh0q01BE3ZB/s829/2022-09-15_14-21_1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;330&quot; data-original-width=&quot;829&quot; height=&quot;254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDhlAy2uPFo78lmRNLXJh77izE0XqDpVlxiiae0ZrxNO1Kh3QyIHbPpCbc1KqKD5IvlxEZBX2CPvQpExVeFdg6i47WWna8DvGYzOT2K5WjqRnNXP79oGKFgZ03PSXyXCGqeFqg5GCad3lWyLyKxhOhzYsq30Dc04M6SpUmakKSpSMrAh0q01BE3ZB/w640-h254/2022-09-15_14-21_1.png&quot; width=&quot;640&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jRSc6IUVzbXJGEZe07LTrNO0lvNICx3rWNCCsyTcXv5iyUfsBEIR6nr6UfrVxfqk36uVEB1Q74lsjznJiuebbpE4mG1dVQx0E2eoFK_QGZqMNivrOEYYVPzLEjAQKQZKplXsaEXUAPA-mw18s7WZncZQXKZEV6tqg1ru-teBNv49r04d5Hb0pr5h/s835/2022-09-15_14-21.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;263&quot; data-original-width=&quot;835&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jRSc6IUVzbXJGEZe07LTrNO0lvNICx3rWNCCsyTcXv5iyUfsBEIR6nr6UfrVxfqk36uVEB1Q74lsjznJiuebbpE4mG1dVQx0E2eoFK_QGZqMNivrOEYYVPzLEjAQKQZKplXsaEXUAPA-mw18s7WZncZQXKZEV6tqg1ru-teBNv49r04d5Hb0pr5h/w640-h202/2022-09-15_14-21.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;Agora para compilar este Build com segurança, devemos parar o Asterisk® SCF™, para isso execute os próximos passos:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;# systemctl stop asterisk.service&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;# make -j4&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;# make install&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;# ldconfig&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;# systemctl start asterisk.service&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;# rasterisk -vvvvgci&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;Na console do&amp;nbsp; 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 &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;modulos.conf&lt;/b&gt;&lt;/span&gt; a opção autoload do modules estar ativa para &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/span&gt;:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;[modules]&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;autoload=yes&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;*CLI&amp;gt; &lt;b&gt;module show like cel_pgsql.so&lt;/b&gt; &lt;br /&gt;Module&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Use Count&amp;nbsp; Status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Support Level&lt;br /&gt;cel_pgsql.so&amp;nbsp;&amp;nbsp; PostgreSQL CEL Backend&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Running&amp;nbsp;&amp;nbsp;&amp;nbsp; extended&lt;br /&gt;1 modules loaded&lt;br /&gt;&lt;/p&gt;&lt;p&gt;*CLI&amp;gt; &lt;b&gt;module show like cdr_pgsql.so&lt;/b&gt; &lt;br /&gt;Module&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Use Count&amp;nbsp; Status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Support Level&lt;br /&gt;cdr_pgsql.so&amp;nbsp;&amp;nbsp; PostgreSQL CDR Backend&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Running&amp;nbsp;&amp;nbsp; extended&lt;br /&gt;1 modules loaded&lt;/p&gt;&lt;p&gt;Pronto, a partir deste ponto, a sua comunicação com o banco de dados PostgreSQL via conector nativo do&amp;nbsp; Asterisk® SCF™ funcionando.Tire a prova de conexão com o CORE/PBX:&lt;/p&gt;&lt;p&gt;*CLI&amp;gt; &lt;b&gt;cel show status &lt;/b&gt;&lt;br /&gt;CEL Logging: Enabled&lt;br /&gt;CEL Tracking Event: HANGUP&lt;br /&gt;CEL Tracking Event: ANSWER&lt;br /&gt;CEL Tracking Event: BRIDGE_ENTER&lt;br /&gt;CEL Tracking Event: ATTENDEDTRANSFER&lt;br /&gt;CEL Tracking Event: USER_DEFINED&lt;br /&gt;CEL Tracking Event: LINKEDID_END&lt;br /&gt;CEL Event Subscriber: CEL Custom CSV Logging&lt;br /&gt;CEL Event Subscriber: ODBC CEL backend&lt;br /&gt;&lt;b&gt;CEL Event Subscriber: CEL PGSQL backend&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Se executar o comando cdr show status, vais ver que também está tudo funcional entre o modulo e CORE/PBX.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;div style=&quot;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;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b style=&quot;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;&quot;&gt;Thats All FOLKS!&lt;/b&gt;&lt;span style=&quot;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;&quot;&gt;&amp;nbsp;(Isso é tudo, pessoal!)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/4264696651975436750/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/4264696651975436750' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4264696651975436750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4264696651975436750'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2022/09/asterisk-module-and-build-option.html' title='Asterisk Module and Build Option Selection - XXX cel_pgsql'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF1dNy2SzB9264A77OS7nQpGtDxf_y45elc_Zt34A-eX1XaKAUW_WHoPHfOno3o0e980pFMr6TPJ8k3UHziCJzYQpdXAHxGF92ZTZdWjZQTO2IoPCSlUVeoAQrIbkqJXL79Vak_Vpm-23GSVBasdW-WNE8GqkvGIltACPNKVWbLPXe_-jm7_JCrd8T/s72-w640-h352-c/Captura%20de%20tela%20de%202022-09-15%2011-01-03.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-8705699552521984455</id><published>2022-08-03T06:04:00.004-10:00</published><updated>2022-08-03T06:07:11.946-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Asterisk® SCF™ Remoção total para reinstalação - Metodo Recomendado.</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkkTAg44PYno_Dbof76_ub1-n4whwKZEyfxXw8U4oiEBO3lfMLrixkeXXrfbNkTd8-txv8gAwsLRtPnH42soe_TIPig_Uq5-XOTDX455TOBUKm3A-9ilsILeDStYQPV9gjOVjZX2WXY7WEwYxdwVLYqu4ibDyp1eBfhB44PGvqNBxUUWAHOLjwIu0q/s397/Asterisk_SCF.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;150&quot; data-original-width=&quot;397&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkkTAg44PYno_Dbof76_ub1-n4whwKZEyfxXw8U4oiEBO3lfMLrixkeXXrfbNkTd8-txv8gAwsLRtPnH42soe_TIPig_Uq5-XOTDX455TOBUKm3A-9ilsILeDStYQPV9gjOVjZX2WXY7WEwYxdwVLYqu4ibDyp1eBfhB44PGvqNBxUUWAHOLjwIu0q/s16000/Asterisk_SCF.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;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™.&amp;nbsp;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;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.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;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...&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;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.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Claro que os procedimentos a seguir, também pode ser utilizado para quando quiser remover por completo o&amp;nbsp; Asterisk® SCF™, a ponto de não querer mais usar ele em um servidor especifico.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;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/.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;E vamos nessa! &lt;br /&gt;&lt;/p&gt;&lt;pre class=&quot;chroma&quot; style=&quot;-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;&quot; tabindex=&quot;0&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;killall -9 safe_asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;killall -9 asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;systemctl disable asterisk.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;rm -rf /etc/asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;rm -rf /var/log/asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;rm -rf /var/lib/asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;rm -rf /var/lib64/asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;rm -rf /var/spool/asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;rm -rf /usr/lib/asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;rm -rf /usr/lib64/asterisk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;reboot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;OBS&lt;/b&gt;: Dependendo da instalação, &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;systemctl disable asterisk.service&lt;/span&gt;&lt;/b&gt;, pode não estar habilitado ou foi configurado para ser executado via &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;@reboot cron&lt;/b&gt;&lt;/span&gt;, e não por &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;daemon service&lt;/b&gt;&lt;/span&gt;. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Agora pode baixar o pacote do Asterisk® SCF™, e refazer a instalação, estou usando o &lt;a href=&quot;https://rockylinux.org/pt_BR/&quot; target=&quot;_blank&quot;&gt;Rock Linux™&lt;/a&gt; e confesso que estou muito feliz com essa distribuição baseada no Sistema Operacional &lt;a href=&quot;https://www.gnu.org/gnu/linux-and-gnu.pt-br.html&quot; target=&quot;_blank&quot;&gt;GNU/Linux&lt;/a&gt;.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;pre class=&quot;chroma&quot; style=&quot;-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;&quot; tabindex=&quot;0&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;cd /usr/local/src/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;wget https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-13.35.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;tar -xvf asterisk-13.35.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;cd asterisk-13.35.0/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;./contrib/scripts/install_prereq install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;./configure --libdir=/usr/lib64 --with-jansson-bundled=yes &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;--with-pjproject-bundled=yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;make menuselect&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;make -j4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;make basic-pbx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;make config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Pronto, agora você está com uma nova versão totalmente limpa em seu servidor. Em &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;make menuselect&lt;/b&gt;&lt;/span&gt;, corrija todos os pontos que sejam importantes para sua solução.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Um outro ponto que deve ser tomado em conta, é que para&amp;nbsp; Asterisk® SCF™ até a versão 14, devemos usar o comando:&lt;/p&gt;&lt;pre class=&quot;chroma&quot; style=&quot;-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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, 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;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;./configure --libdir=/usr/lib64 --with-jansson-bundled=yes &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;--with-pjproject-bundled=yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;-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;&quot;&gt;&lt;div style=&quot;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;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Para versões superiores a versão 15, deve ser assim:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;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;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;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;&quot;&gt;&lt;pre class=&quot;chroma&quot; style=&quot;-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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, 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;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;./configure --libdir=/usr/lib64 --with-jansson-bundled=yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot; style=&quot;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, &amp;quot;liberation mono&amp;quot;, &amp;quot;courier new&amp;quot;, monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;&quot;&gt;&lt;span class=&quot;line&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;cl&quot; style=&quot;box-sizing: border-box;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b style=&quot;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;&quot;&gt; &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;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;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;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;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b style=&quot;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;&quot;&gt;Thats All FOLKS!&lt;/b&gt;&lt;span style=&quot;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;&quot;&gt;&amp;nbsp;(Isso é tudo, pessoal!)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;br /&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/8705699552521984455/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/8705699552521984455' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/8705699552521984455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/8705699552521984455'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2022/08/asterisk-scf-remocao-total-para.html' title='Asterisk® SCF™ Remoção total para reinstalação - Metodo Recomendado.'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkkTAg44PYno_Dbof76_ub1-n4whwKZEyfxXw8U4oiEBO3lfMLrixkeXXrfbNkTd8-txv8gAwsLRtPnH42soe_TIPig_Uq5-XOTDX455TOBUKm3A-9ilsILeDStYQPV9gjOVjZX2WXY7WEwYxdwVLYqu4ibDyp1eBfhB44PGvqNBxUUWAHOLjwIu0q/s72-c/Asterisk_SCF.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-4658764651010255129</id><published>2022-06-04T15:30:00.015-10:00</published><updated>2022-06-06T09:13:32.787-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="Clustering"/><title type='text'>Capítulo 22. Agrupamento (Clustering).</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoTezuEYYjsqbCH0AInEUKH6TMBkb4s5UWsomFso0LqhiQDurH3z-FrMGupEoh9qMH3EJEkFv9b4At3i7UEolDTALWuWVf_Sx3tJvcHyXoTdSHD4Cmi5WB64LjYpB_SgnM4Xo90jgUMIx9OqA5aTakyuC5Hq7V4q73bq9pNwoBnr0O9nlFVexu05C6/s320/architecture-asterisk.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;320&quot; data-original-width=&quot;320&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoTezuEYYjsqbCH0AInEUKH6TMBkb4s5UWsomFso0LqhiQDurH3z-FrMGupEoh9qMH3EJEkFv9b4At3i7UEolDTALWuWVf_Sx3tJvcHyXoTdSHD4Cmi5WB64LjYpB_SgnM4Xo90jgUMIx9OqA5aTakyuC5Hq7V4q73bq9pNwoBnr0O9nlFVexu05C6/s1600/architecture-asterisk.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Você pode não conseguir comer um cacho de uva de uma única vez, mas é muito fácil comer uma a uma.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;- Jacques Roumain - Escritor, Político e Defensor do Marxismo Haitiano. 1907 ~ 1944, Porto Príncipe/Haiti.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; text-align: justify;&quot;&gt;A palavra agrupamento (&lt;/span&gt;&lt;b style=&quot;font-family: georgia; text-align: justify;&quot;&gt;Clustering&lt;/b&gt;&lt;span style=&quot;font-family: georgia; text-align: justify;&quot;&gt;) pode significar coisas diferentes para pessoas diferentes. Algumas pessoas diriam que o &lt;/span&gt;&lt;b style=&quot;font-family: georgia; text-align: justify;&quot;&gt;clustering&lt;/b&gt;&lt;span style=&quot;font-family: georgia; text-align: justify;&quot;&gt; é simplesmente ter um sistema replicado em espera disponível para ser ativado quando o sistema primário falhar. Para outros, &lt;/span&gt;&lt;b style=&quot;font-family: georgia; text-align: justify;&quot;&gt;clustering&lt;/b&gt;&lt;span style=&quot;font-family: georgia; text-align: justify;&quot;&gt; é 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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Este capítulo do livro&amp;nbsp;&lt;span style=&quot;background-color: white; text-align: center;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;em style=&quot;background-color: white; font-weight: bold; text-align: center;&quot;&gt;Asterisk: The Definitive Guide&lt;/em&gt;&lt;span style=&quot;background-color: white; text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;(3nd Edition for Asterisk 1.8), escrito por Leif Madsen, Jim Van Meggelen, e Russell Bryant&lt;/b&gt;. é explorado as possibilidades de clustering que existem com&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold; text-align: left;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; text-align: left;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold; text-align: left;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; text-align: left;&quot;&gt;™ 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold; text-align: left;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; text-align: left;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold; text-align: left;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; text-align: left;&quot;&gt;™, as topologias que abordamos provaram ser confiáveis ao longo dos anos.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Nossos exemplos se aprofundarão na construção de um &lt;b&gt;call center&lt;/b&gt; 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.&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: small;&quot;&gt;Call Centers Tradicionais&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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 &lt;b&gt;Figura 22.1&lt;/b&gt;, &quot;Central de Atendimento Tradicional&quot;.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHK4Wb5w3cMbSZqfjQGiBSoTk3qAxcTFYytLV6bHl73P2_gZTl7WbSlFOXctpHQsA_7jXv9KmWIZK5-FZpWwaoWKz8Cs4yvXKOI_pW9f6edTSqiTXM5wnLWbaWDY7ZWlxb1LgEZ5TALXqpdXC_84I-LZArasmqVEfgnadokZQmFJAY75J0zghn2Btr/s320/adg3_2201.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;157&quot; data-original-width=&quot;320&quot; height=&quot;196&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHK4Wb5w3cMbSZqfjQGiBSoTk3qAxcTFYytLV6bHl73P2_gZTl7WbSlFOXctpHQsA_7jXv9KmWIZK5-FZpWwaoWKz8Cs4yvXKOI_pW9f6edTSqiTXM5wnLWbaWDY7ZWlxb1LgEZ5TALXqpdXC_84I-LZArasmqVEfgnadokZQmFJAY75J0zghn2Btr/w400-h196/adg3_2201.png&quot; width=&quot;400&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: white; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-small;&quot;&gt;Figura 22.1. Central de Atendimento Tradicional&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ trazem recursos que antes custavam milhares de dólares como parte incluída do software.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;É claro que, com o dinheiro investido em hardware&amp;nbsp;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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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&amp;nbsp;a ser usado, mas novas extensões e recursos são adicionados ao sistema usando o&amp;nbsp;&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Sistemas Híbridos&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Um sistema de telefonia híbrido (figura 22.2, &quot;Sistema Híbrido Remoto) contém a mesma funcionalidade e hardware de um sistema de telefonia tradicional, com exceção de&amp;nbsp; outro sistema, como o&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold; text-align: justify;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; text-align: justify;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold; text-align: justify;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; text-align: justify;&quot;&gt;™, que está conectado a ele, fornecendo capacidade e funcionalidade adicionais. Adicionar o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ a um sistema tradicional normalmente é feito através de uma conexão PRI (PSTN). Do ponto de vista do sistema tradicional, o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ se parecerá com outra companhia telefônica&amp;nbsp;(Escritório Central ou Operadora VoIP - ITSP, Internet Telephony Service Provider). Dependendo da forma como o sistema&amp;nbsp;tradicional opera e dos serviços disponíveis para ou da ITSP, o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™, que em seguida, direciona as chamadas&amp;nbsp;para os novos terminais (Telefones IPs) e para a própria&amp;nbsp;ITSP, criando ai, uma Rota de Menor Custo (Least Cost Routing).&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY4yEpvIdCfqM_UJxILjC_aZvs5qHUIdoYzk-n1gKdzl4WwzgHzGZAKXFICpG3e0X158RnxPA8rqVDUuOVnnU0CLzkrVNizzQWaRXEMAZhI9Rd9EkMniNMED0zSg_Tko8_YHghIG-aaKRqSHMjjIKxUL3Y51ykUq4eJ0IYZwgombp6ZvnuLg-CRn9H/s453/adg3_2202.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;453&quot; data-original-width=&quot;434&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY4yEpvIdCfqM_UJxILjC_aZvs5qHUIdoYzk-n1gKdzl4WwzgHzGZAKXFICpG3e0X158RnxPA8rqVDUuOVnnU0CLzkrVNizzQWaRXEMAZhI9Rd9EkMniNMED0zSg_Tko8_YHghIG-aaKRqSHMjjIKxUL3Y51ykUq4eJ0IYZwgombp6ZvnuLg-CRn9H/w384-h400/adg3_2202.png&quot; width=&quot;384&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small;&quot;&gt;Figura 22.2.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: small; text-align: justify;&quot;&gt;Sistema Híbrido Remoto&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Com o&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ no cenário&amp;nbsp;(circuito), a funcionalidade pode ser movida aos poucos do sistema PABX existente para o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™, que pode assumir um papel maior e comandar mais do sistema&amp;nbsp;ao longo do tempo. Eventualmente, o sistema de PABX existente pode simplesmente ser usado como um método para enviar chamadas&amp;nbsp;para os aparelhos&amp;nbsp;existentes (analógicos, POTS), nas estações dos agentes, com aqueles sendo eliminados ao longo do tempo e substituídos&amp;nbsp;por telefones baseados em SIP, à medida que a fiação é instalada e os telefones IPs são comprados.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Ao adicionar o&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ ao circuito existente, ganhamos um novo conjunto de funcionalidades e vantagens, como:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Funcionalidades como conferencia e correio de voz (com a possibilidade de os usuários serem notificados por e-mail de novas mensagens);&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Linhas telefônicas&amp;nbsp;expandidas usando VoIP e redução de custos de longa distancia (DDD e DDI)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ para conexão ao PABX tradicional. No entanto, estamos indo na direção certa e, com o sistema&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ no circuito, podemos iniciar a migração ao longo do tempo, limitando as interrupções nos negócios e adotado uma abordagem&amp;nbsp;mais gradual para treinar os usuários.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: small;&quot;&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ Puro, Não Distribuído (Nondistributed)&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;O próximo&amp;nbsp;passo em nossa jornada é o sistema&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ Puro (Puro que dizer, somente a linha de comando, se nenhuma interface gráfica, lembrando que a interface&amp;nbsp;gráfica&amp;nbsp;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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™. Nosso PRI (PSTN) existente foi anexado ao&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ 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&amp;nbsp;remotos. Está topologia é ilustrada na Figura 22.3, &quot;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ Puro, Não Distribuído (Nondistributed)&quot;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0U5k5Z-AgejEF3RGNq3V3mv8ople94DoUo4mwMxk6JdSA7Cy1DLm_grnp4xkIQ23WFIu7FGrn08bI5wsvTwRXhk0BfOB_uR8IME6OuWUqvH6qDwjBx9fnloRVqRPWD0yzNC72VdJAHz1OMCjwQxUcWvzKSj_QmGsUOQnDOt5utmv6Doy8fiGHWRd1/s463/adg3_2203.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;463&quot; data-original-width=&quot;447&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0U5k5Z-AgejEF3RGNq3V3mv8ople94DoUo4mwMxk6JdSA7Cy1DLm_grnp4xkIQ23WFIu7FGrn08bI5wsvTwRXhk0BfOB_uR8IME6OuWUqvH6qDwjBx9fnloRVqRPWD0yzNC72VdJAHz1OMCjwQxUcWvzKSj_QmGsUOQnDOt5utmv6Doy8fiGHWRd1/w386-h400/adg3_2203.png&quot; width=&quot;386&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-small;&quot;&gt;&lt;span style=&quot;background-color: white; text-align: left;&quot;&gt;Figura 22.3.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ Puro, Não Distribuído (Nondistributed)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;A utilização deste sistema é simples e eficiente, mas à medida que a empresa cresce, o sistema pode chagar a um problema de capacidade.&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: small;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Integração do Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ Puro ao Banco de dados.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Integrar o&amp;nbsp;&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;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&amp;nbsp;de um sistema&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™. Além disso, permite acesso instantâneo a informações do Dialplan e outras partes do sistema do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: small;&quot;&gt;Banco de Dados Único&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Adicionar integração de banco de dados ao&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ (Figura 22.4 &quot;Integração&amp;nbsp;de Banco de Dados ao&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™, Banco de Dados Único&quot;) é 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Realtime&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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).&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;A integração com o banco de dados adiciona uma camada entre o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ é deixado&amp;nbsp; para o administrador do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™, e o desenvolvedor Web pode trabalhar alegremente com ferramentas com as quais está familiarizado.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o2_jg_JUAIo1JXujQAflP56YDR9xVaEKoum9OhBsXxC750dxKcg1YlgEOmB26x7TDZOnoiGHJkbCp3IhOXpSOuq3HHGekMkzbcAPgHanGroEdfgDBQSJheDQWG2c1jilTLzd5emNHJ5FUVXU77PLGMqUt4kkDVpJoa4kmaGod79HZlDizihsRKiZ/s529/adg3_2204.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;511&quot; data-original-width=&quot;529&quot; height=&quot;386&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o2_jg_JUAIo1JXujQAflP56YDR9xVaEKoum9OhBsXxC750dxKcg1YlgEOmB26x7TDZOnoiGHJkbCp3IhOXpSOuq3HHGekMkzbcAPgHanGroEdfgDBQSJheDQWG2c1jilTLzd5emNHJ5FUVXU77PLGMqUt4kkDVpJoa4kmaGod79HZlDizihsRKiZ/w400-h386/adg3_2204.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small; text-align: left;&quot;&gt;Figura 22.4.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small;&quot;&gt;Integração&amp;nbsp;de Banco de Dados ao&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small;&quot;&gt;™, Banco de Dados Único&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Claro, isso torna o sistema&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;®&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;™ um pouco mais complexo de construir, mas a integração com um banco de dados via &lt;b&gt;ODBC&lt;/b&gt; adiciona todos os tipos de possibilidades (como o hot-desking). O &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;FUNC_ODBC&lt;/span&gt;&lt;/b&gt; é uma ferramenta poderosa para o administrador do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;®&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;™, fornecendo a habilidade de construir um Dialplan estático usando dados de natureza dinâmica.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Também gostamos muito do módulo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;FUNC_CURL&lt;/span&gt;&lt;/b&gt;, que fornece&amp;nbsp; integração com serviços da Web sobre &lt;b&gt;HTTP&lt;/b&gt; diretamente do Dialplan.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Com os dados abstraídos diretamente do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;®&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;™ 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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Linux-HA&lt;/span&gt;&lt;/b&gt; (&lt;/span&gt;&lt;a href=&quot;http://www.linux-ha.org/wiki/Main_Page&quot; target=&quot;_blank&quot;&gt;http://www.linux-ha.org/wiki/Main_Page&lt;/a&gt;) 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&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;®&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;™ podemos usar aplicativos como &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UNISON&lt;/span&gt;&lt;/b&gt; (&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;a href=&quot;https://www.cis.upenn.edu/~bcpierce/unison/&quot; target=&quot;_blank&quot;&gt;https://www.cis.upenn.edu/~bcpierce/unison/&lt;/a&gt;) ou até mesmo o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;RSYNC&lt;/span&gt;&lt;/b&gt; para manter&amp;nbsp;os arquivos de configuração sincronizados entre os Sistemas Operacionais e o Backup do Sistema. Também podemos usar o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;SubVersion&lt;/span&gt;&lt;/b&gt; ou o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Git&lt;/span&gt;&lt;/b&gt; para rastrear alterações nos arquivos de configuração, facilitando a reversão de alterações que não funcionam.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;É 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.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ pode então fazer o failover para o&amp;nbsp; outro banco de dados automaticamente se o servidor primário ficar indisponível.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-size: small;&quot;&gt;Banco de Dados Replicados&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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 &quot;Integração de Banco de Dados do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ com Banco de Dados Distribuído&quot; ilustra esse cenário&amp;nbsp;recomendado.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7xWErQ2grKegBWDge-0_T35AINNpx_m0IWlcQhRCg7w7q_hL600_5OHJGyRF45HbgGJyvMWEMA3peDoc3cwxUZ5SiZh6Kk0eCJLPig4deicVmYlJEjYed9YBY7q94KRqB4iAs4_btTWG1Y9xJ8fJzS7cu1b7ZHjRP8Hxwri2TcG3q5Nrw0RkRrspx/s581/adg3_2205.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;553&quot; data-original-width=&quot;581&quot; height=&quot;381&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7xWErQ2grKegBWDge-0_T35AINNpx_m0IWlcQhRCg7w7q_hL600_5OHJGyRF45HbgGJyvMWEMA3peDoc3cwxUZ5SiZh6Kk0eCJLPig4deicVmYlJEjYed9YBY7q94KRqB4iAs4_btTWG1Y9xJ8fJzS7cu1b7ZHjRP8Hxwri2TcG3q5Nrw0RkRrspx/w400-h381/adg3_2205.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Figura 22.5&amp;nbsp; Integração de Banco de Dados do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;®&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;™ com Banco de Dados Distribuído&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Já utilizamos em nossos cenários&amp;nbsp;a replicação &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Mestre-Mestre&lt;/span&gt;&lt;/b&gt; do &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;MySQL&lt;/span&gt;&lt;/b&gt; antes (agora usamos o &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;PostgreSQL&lt;/b&gt;&lt;/span&gt;) e funciona muito bem. Não realizamos o mesmo cenário&amp;nbsp;com &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;MariaDB&lt;/span&gt;&lt;/b&gt;, logo não temos como assegurar o comportamento. Também quero dizer que não é difícil&amp;nbsp;de configurar, e existem&amp;nbsp;vários tutoriais na Internet. Outros sistemas de banco de dados provavelmente&amp;nbsp;também conterão essa funcionalidade, especialmente se você estiver usando um sistema comercial com o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Oracle&lt;/span&gt;&lt;/b&gt; ou &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;MS SQL&lt;/span&gt;&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Failover pode ser feito nativamente no&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™, 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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;Programas externos também podem ser usados para controlar o Failover entre sistemas. O aplicativo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PEN&lt;/span&gt;&lt;/b&gt; (&lt;a href=&quot;http://siag.nu/pen/&quot; target=&quot;_blank&quot;&gt;http://siag.nu/pen/&lt;/a&gt;) é um balanceador de carga para aplicativos TCP simples, como &lt;b&gt;HTTP&lt;/b&gt; ou &lt;b&gt;SMTP&lt;/b&gt;, que permite que vários servidores apareçam como um. Isso significa que o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ só precisa ser configurado para se conectar a um único endereço IP (ou hostname); o aplicativo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;PEN &lt;/span&gt;&lt;/b&gt;cuidará de controlar qual servidor será uasdo para cada solicitação.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: small;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ Puro e Estados de Dispositivos&amp;nbsp;&lt;/span&gt;Distribuído&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Os estados do dispositivo no&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ são importantes tanto do ponto de vista do software (o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ 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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;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 &lt;b&gt;LAN&lt;/b&gt; (links de baixa latência) ou em uma &lt;b&gt;WAN&lt;/b&gt; (links de alta latência).&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Bem, vamos&amp;nbsp;discutir os dois métodos&amp;nbsp;de distribuição de estado dos dispositivos na sequencia: &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;OpenAIS&lt;/span&gt;&lt;/b&gt; para links de baixa latência&amp;nbsp;e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;XMPP&lt;/span&gt;&lt;/b&gt; para links de alta latência.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Distribuindo Estados de Dispositivos em uma LAN&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;A implementação do OpenAIS (&lt;a href=&quot;http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/DeviceStates_id265044.html#DeviceStates_id265052&quot; target=&quot;_blank&quot;&gt;Using OpenAIS&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;) foi adicionada pela primeira vez ao Asterisk na &lt;/span&gt;&lt;b style=&quot;font-family: georgia;&quot;&gt;branch 1.6.1&lt;/b&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;, para permitir a distribuição de informações de estado do dispositivo&amp;nbsp;entre servidores. A adição do OpenAIS forneceu grandes&amp;nbsp;possibilidades para sistemas distribuídos, pois a consciência&amp;nbsp;do estado do dispositivo é um aspecto importante&amp;nbsp;de tais sistemas. Os métodos&amp;nbsp;anteriores exigiram&amp;nbsp;o uso de &lt;b&gt;GROUP( )&lt;/b&gt; e &lt;b&gt;GROUP_CONT( )&lt;/b&gt; para cada canal, com essa informação consultada por &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;DUNDi&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;®&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;. Embora essa abordagem seja útil em alguns cenários&amp;nbsp;(podemos usar essa funcionalidade para pesquisar o número de chamadas&amp;nbsp;que nossos sistemas estão processando e direcionar chamadas&amp;nbsp;de forma inteligente para sistemas&amp;nbsp;que lidam com menos chamadas), como um mecanismo para determinar as informações de estado do dispositivo, se está presente ou não.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhemnc7Zwn8bUAqjR4jXR9rirzDmJqWupGYr5N7knnOu-SaUzNynUFz-Ohyit-nKuy6JyyUCbIUy0rNOuzJQCqlOpzlh52ekuOX8O-xcLiYiH92uwp_3e6kxdiRAOWe7RtQXD3M5cSCFyotZV9mEk9Rl29CXZ3c3h5J9-Sf8ihZQmSIalJAHXXUxIkE/s706/adg3_2206.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;553&quot; data-original-width=&quot;706&quot; height=&quot;313&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhemnc7Zwn8bUAqjR4jXR9rirzDmJqWupGYr5N7knnOu-SaUzNynUFz-Ohyit-nKuy6JyyUCbIUy0rNOuzJQCqlOpzlh52ekuOX8O-xcLiYiH92uwp_3e6kxdiRAOWe7RtQXD3M5cSCFyotZV9mEk9Rl29CXZ3c3h5J9-Sf8ihZQmSIalJAHXXUxIkE/w400-h313/adg3_2206.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span face=&quot;sans-serif&quot; style=&quot;background-color: white; font-size: small;&quot;&gt;Figura 22.6. Distribuição de Estado do Dispositivo com OpenAIS&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span face=&quot;sans-serif&quot;&gt;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&amp;nbsp;entre vários sistemas&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ (veja a Figura 22.6, &quot;Distribuição de Estado de Dispositivo com OpenAIS&quot;). A desvantagem da implementação do &lt;b&gt;OpenAIS&lt;/b&gt; é 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&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt; Queue( ) &lt;/span&gt;&lt;/b&gt;resida em um Servidor&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;e seus membros&amp;nbsp;da fila residam em outro Servidor&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&amp;nbsp;(ou vários Servidores&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;). 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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;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&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: georgia;&quot;&gt;branch&lt;/b&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&amp;nbsp;&lt;b&gt;1.8&lt;/b&gt;, 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.&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Distribuindo Estados de Dispositivos em uma WAN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Desde a branch 1.8 do&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™, 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ em diferentes locais físicos, distribuindo informações de estado do dispositivo entre si (veja a Figura 22.7, &quot;Distribuindo Estados de Dispositivos com XMPP&quot;). 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 &lt;b&gt;XMPP&lt;/b&gt;, um servidor central (ou cluster de servidores) é usado para distribuir o estado entre todas os Servidores&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ no cluster. Atualmente, a melhor aplicação para fazer isso é o Servidor &lt;b&gt;Tigase XMPP&lt;/b&gt; (&lt;a href=&quot;https://tigase.net/&quot; target=&quot;_blank&quot;&gt;https://tigase.net/&lt;/a&gt;), devido ao suporte a eventos &lt;b&gt;PubSub&lt;/b&gt;. Embora outros servidores &lt;b&gt;XMPP&lt;/b&gt; possam ser suportados no futuro, apenas o Tigase é conhecido por funcionar no momento.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rqb4OCJ29-W4yFvUBM2J5qLs-nBcnklKP0_UM8ESg9HwhHrxxxaGrPnpV8b-C-ph8MYmu2H6ZcPCVagjAHBCgSWz0IN_3s-LxYPCga6a9UR04gWnm9GlVNRj0a7NA1EHAW8vuQa-YT5aiD5fx7t5nLo3dETXo1w3-x_DD8zHc54ob9pVFeRo0R7t/s670/adg3_2207.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;612&quot; data-original-width=&quot;670&quot; height=&quot;365&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rqb4OCJ29-W4yFvUBM2J5qLs-nBcnklKP0_UM8ESg9HwhHrxxxaGrPnpV8b-C-ph8MYmu2H6ZcPCVagjAHBCgSWz0IN_3s-LxYPCga6a9UR04gWnm9GlVNRj0a7NA1EHAW8vuQa-YT5aiD5fx7t5nLo3dETXo1w3-x_DD8zHc54ob9pVFeRo0R7t/w400-h365/adg3_2207.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia; text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Figura 22.7, Distribuindo Estados de Dispositivos com XMPP&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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&amp;nbsp;entre esses escritórios&amp;nbsp;satélites&amp;nbsp;até que o site principal volte a ficar online. Isso é bastante&amp;nbsp;empolgante para muitas pessoas, pois adiciona uma camada de funcionalidade que não estava disponível&amp;nbsp;anteriormente e a maior parte pode&amp;nbsp;ser feita com uma configuração relativamente mínima.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;A vantagem da distribuição de estado do dispositivo com XMPP (&lt;a href=&quot;http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/DeviceStates_id265044.html#DeviceStates_id265061&quot; target=&quot;_blank&quot;&gt;Using XMPP&lt;/a&gt;), é 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.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Múltiplas&amp;nbsp;Filas, Múltiplos&amp;nbsp;Sites&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;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, &quot; Infraestrutura de Filas Distribuídas&quot; ilustra um exemplo de configuração onde temos cinco servidores&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ sendo liderados por outro cluster usado para distribuir/rotear as chamadas para as várias filas que configuramos. Nosso ITSP envia chamadas para o &lt;b&gt;clouster&lt;/b&gt; de roteamento (que pode ser algo como &lt;b&gt;Kamailio&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;b&gt;®&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;, ou mesmo vários servidores&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ implementando &lt;b&gt;DUNDi&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;b&gt;®&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&amp;nbsp;ou algum outro método para rotear e distribuir chamadas, P. Ex. &lt;b&gt;FreeSWITCH&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;b&gt;®&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;), que então envia as chamadas conforme apropriado para um dos três Servidores&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™ 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).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil8zPaHeXaAlQgiGm2YQAGDXjvIs4zZYFZO3AGSuxCIHhJ3Rke0qy2nrcFQ-MxE-wFU9e58t7zJvNgzeKC09mmh-CVy8TsPY9smQlWvWUACEtDU3yNLO06SiZy4Qm6PpVIYiGd4NIstwR_08nTniaCbc63Obu4hMl1UT8kT7DtffL5hG-_sWNLtjRa/s703/adg3_2208.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;606&quot; data-original-width=&quot;703&quot; height=&quot;345&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil8zPaHeXaAlQgiGm2YQAGDXjvIs4zZYFZO3AGSuxCIHhJ3Rke0qy2nrcFQ-MxE-wFU9e58t7zJvNgzeKC09mmh-CVy8TsPY9smQlWvWUACEtDU3yNLO06SiZy4Qm6PpVIYiGd4NIstwR_08nTniaCbc63Obu4hMl1UT8kT7DtffL5hG-_sWNLtjRa/w400-h345/adg3_2208.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia; text-align: justify;&quot;&gt;Figura 22.8, Infraestrutura de Filas Distribuídas&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;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.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;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&amp;nbsp; que suportamos adicionando mais servidores, cada um lidando com uma fila ou filas diferentes.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Uma desvantagem de usar este sistema é a forma como o aplicativo &lt;b&gt;Queue( )&lt;/b&gt; foi desenvolvido. &lt;b&gt;Queue( )&lt;/b&gt; é uma das aplicações mais antigas do&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™, 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 &lt;b&gt;Queue( )&lt;/b&gt; 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ , e então outro chamador entra na fila de vendas do segundo servidor&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™, 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&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™&amp;nbsp; tenham a capacidade&amp;nbsp; 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.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Um ótimo recurso para ser utilizado entre os vários servidores&amp;nbsp;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;™ é 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&amp;nbsp; SIP somente para os usuários/devices/endpoint e ITSP.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;Conclusão&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;Neste capitulo, foi explorado como você pode fazer a transição de um sistema de telefonia tradicional (não&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;Asterisk&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;®&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia; font-weight: bold;&quot;&gt;SCF&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;™, 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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Construir um sistema simples agora e planejar para o futuro e como você&amp;nbsp;vai chegar lá (especialmente se você&amp;nbsp;puder fazer isso em iterações, sem ter que destruir toda a sua infraestrutura&amp;nbsp;ou começar do zero) vai te colocar em funcionamento tanto mais rápido. À medida que você cresce, você&amp;nbsp;pode adicionar mais peças, determinar&amp;nbsp;se a abordagem&amp;nbsp;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&amp;nbsp;refazer todo o seu sistema complexo por causa de algum novo requisito que você&amp;nbsp;não previu no inicio.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;Também mencionamos algumas vantagens de ter um sistema distribuído&amp;nbsp;com funcionários&amp;nbsp;remotos, como melhorar&amp;nbsp;a moral dos funcionários&amp;nbsp;e redução de custos. Você pode usar as conexões de Internet, hardware&amp;nbsp;e eletricidade existentes de seus funcionários, o que pode economizar dinheiro para a empresa, e seus funcionários&amp;nbsp;se beneficiarão evitando o agravamento e os custos&amp;nbsp;de se deslocar para um escritório&amp;nbsp;todos os dias. Embora nem todas as situações permitam esse tipo de cenário, vale a pena explorar&amp;nbsp;se adicionar suporte para funcionários&amp;nbsp;remotos será&amp;nbsp;útil&amp;nbsp;para o seu negocio.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;Finalmente, o estado do dispositivo distribuído&amp;nbsp;pode abrir um mundo de possibilidades para sua empresa, permitindo&amp;nbsp;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.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Fonte:&amp;nbsp;&lt;/span&gt;&lt;em style=&quot;background-color: white; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/index.html&quot; target=&quot;_blank&quot;&gt;Asterisk: The Definitive Guide&lt;/a&gt;&lt;/em&gt;&lt;span style=&quot;background-color: white; text-align: center;&quot;&gt;&amp;nbsp;(3nd Edition for Asterisk 1.8), escrito por Leif Madsen, Jim Van Meggelen, e Russell Bryant. (Capitulo 22).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: georgia;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4658764651010255129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4658764651010255129'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2022/06/capitulo-22-agrupamento-clustering.html' title='Capítulo 22. Agrupamento (Clustering).'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoTezuEYYjsqbCH0AInEUKH6TMBkb4s5UWsomFso0LqhiQDurH3z-FrMGupEoh9qMH3EJEkFv9b4At3i7UEolDTALWuWVf_Sx3tJvcHyXoTdSHD4Cmi5WB64LjYpB_SgnM4Xo90jgUMIx9OqA5aTakyuC5Hq7V4q73bq9pNwoBnr0O9nlFVexu05C6/s72-c/architecture-asterisk.png" height="72" width="72"/><georss:featurename>Jardim Luísa, São Paulo - SP, Brasil</georss:featurename><georss:point>-23.5940036 -46.7653826</georss:point><georss:box>-31.629225352847058 -55.5544451 -15.558781847152945 -37.9763201</georss:box></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-241643555338885342</id><published>2022-02-01T06:05:00.002-10:00</published><updated>2022-02-01T06:05:32.985-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Channel PJSIP &lt; == &gt; Channel SIP (Configurando um Tronco IP)</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEje06j0ZTRopbGC93-6Z2ec0Uhr6t8TlAOjhbiYMrqGqfzH0vWLSMdEnpBEUa6o8VSWPnCz9PpC1s6QByuFJq7_zjiw3HZPoNMhPQtd4ruWSDqhI_6o3M9mvpnjb18E0zJdgRTE0Md8gk0Nd59Y2IAfsY-mLWOOySEct00o58VFXxMpZ558GqXC6ttl=s1400&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;800&quot; data-original-width=&quot;1400&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEje06j0ZTRopbGC93-6Z2ec0Uhr6t8TlAOjhbiYMrqGqfzH0vWLSMdEnpBEUa6o8VSWPnCz9PpC1s6QByuFJq7_zjiw3HZPoNMhPQtd4ruWSDqhI_6o3M9mvpnjb18E0zJdgRTE0Md8gk0Nd59Y2IAfsY-mLWOOySEct00o58VFXxMpZ558GqXC6ttl=w400-h229&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Fonte:&amp;nbsp;https://iplinktelecom.com/&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;Este guia irá ajuda-lo a realizar a configuração de um Tronco IP entre dois servidores &lt;b&gt;Asterisk® SCF™&lt;/b&gt;, utilizando canais diferentes em relação ao protocolo SIP, afinal não importa se é &lt;b&gt;CHANNEL SIP &lt;/b&gt;(modulo chan_sip.so) ou &lt;b&gt;CHANNEL PJSIP &lt;/b&gt;(modulo chan_pjsip.so), &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;o protocolo é único&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;SIP 2.0&lt;/b&gt;, ainda com a &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc3261&quot; target=&quot;_blank&quot;&gt;RFC 3261&lt;/a&gt;.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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!).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;é uma estrutura de código aberto para a construção de aplicativos de comunicação. O&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;transforma um computador comum em um servidor de comunicação. O&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™. &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;É&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;usado por pequenas empresas e grande empresas, Call Centers, Operadoras e Agências Governamentais, em todo o mundo.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Existem dois métodos&amp;nbsp;padrão para conectar um Softswitch PBX IP, baseado em&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;entre si:&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Muito importante lembrar que o correto para fazer um tronco entre dois servidores&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;é fazendo uso do PROTOLOCO IAX que se encontra também na versão 2.0. &lt;a href=&quot;https://www.delphini.com.br/2020/08/inter-asterisk-exchange-iax-o-protocolo.html&quot; target=&quot;_blank&quot;&gt;Aqui&lt;/a&gt; tem um post sobre isso&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Para mais documentação do&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial; text-align: justify;&quot;&gt;Asterisk® SCF™, &lt;/b&gt;&lt;span style=&quot;font-family: arial; text-align: justify;&quot;&gt;veja:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;http://www.asteriskdocs.org&quot; target=&quot;_blank&quot;&gt;http://www.asteriskdocs.org&lt;/a&gt; é um livro HTML gratuito (o livro impresso correspondente é publicado convencionalmente pela O&#39;Reilly em Inglês e pela Novatec em Português).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;http://www.asterisk.org&quot; target=&quot;_blank&quot;&gt;http://www.asterisk.org&lt;/a&gt; é o site do&amp;nbsp;&lt;b style=&quot;text-align: left;&quot;&gt;Asterisk® SCF™&lt;/b&gt;, operado pela Digium&lt;b style=&quot;text-align: left;&quot;&gt;®&lt;/b&gt;&amp;nbsp;uma empresa do grupo Sangoma&lt;b style=&quot;text-align: left;&quot;&gt;®&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;.Instruções para configurar um tronco entre dois servidores&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™, &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;a seguir vamos ver:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Configurar um tronco SIP utilizando PJSIP_WIZARD;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Configurar o servidor para fazer e receber chamadas entre eles;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Concluindo a configuração básica do PJSIP;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Configurar o Dialplan.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Pré-requisitos:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Um servidor com Asterisk fazendo uso do modulo chan_sip.so;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Um servidor com Asterisk fazendo uso do modulo chan_pjsip.so;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Rede totalmente funcional entre os servidores.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;1 &lt;/b&gt;- Segue as configurações para o servidor fazendo uso do modulo chan_sip.so:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;OBS: Algumas configurações são recomendadas, ou seja não são obrigatórias.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Edite o arquivo sip.conf:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div&gt;[general]&lt;/div&gt;&lt;div&gt;dtmfmode=rfc2833&lt;/div&gt;&lt;div&gt;notifyringing=yes&lt;/div&gt;&lt;div&gt;context=from-pstn&lt;/div&gt;&lt;div&gt;srvlookup=yes&lt;/div&gt;&lt;div&gt;disallow=all&lt;/div&gt;&lt;div&gt;rtptimeout=60&lt;/div&gt;&lt;div&gt;useragent=PBX IP&lt;/div&gt;&lt;div&gt;qualify=100000&lt;/div&gt;&lt;div&gt;nat=yes&lt;/div&gt;&lt;div&gt;maxexpirey=1800&lt;/div&gt;&lt;div&gt;defaultexpirey=1800&lt;/div&gt;&lt;div&gt;tcpenable=yes&lt;/div&gt;&lt;div&gt;#include &quot;sip_custom.conf&quot;&lt;/div&gt;&lt;div&gt;register =&amp;gt; srvchansip:srv12345@172.31.31.2:5060/94455&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[94455]&lt;/div&gt;&lt;div&gt;type=friend&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;allow=ulaw&lt;br /&gt;allow=alaw&lt;br /&gt;allow=g729&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;allow=gsm&lt;br /&gt;dtmfmode=rfc2833&lt;br /&gt;call-limit=60&lt;br /&gt;defaultuser=srvchansip&lt;br /&gt;fromuser=srvchansip&lt;br /&gt;fromdomain=172.31.31.1&lt;br /&gt;qualify=yes&lt;br /&gt;port=5060&lt;br /&gt;secret=srv12345&lt;br /&gt;insecure=port,invite&lt;br /&gt;host=172.31.31.1&lt;br /&gt;context=from-itx-srvchanpjsip&lt;br /&gt;transport=udp&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;2&lt;/b&gt; - Segue as configurações para o servidor fazendo uso do modulo chan_sip.so:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Edite o arquivo pjsip_wizard.conf:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div&gt;[trunk_defaults]&amp;nbsp;&lt;/div&gt;&lt;div&gt;type = wizard&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[srvchansip]&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/transport = 0.0.0.0-udp&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/allow = !all,ulaw,alaw,G729,G722&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/rewrite_contact = yes&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/dtmf_mode = rfc4733&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/context = from-pstn&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/force_rport = yes&amp;nbsp;&lt;/div&gt;&lt;div&gt;aor/qualify_frequency = 60&amp;nbsp;&lt;/div&gt;&lt;div&gt;sends_auth = no&amp;nbsp;&lt;/div&gt;&lt;div&gt;sends_registrations = no&amp;nbsp;&lt;/div&gt;&lt;div&gt;remote_hosts = 172.31.31.1:5060&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;b&gt;OBS&lt;/b&gt;: para que esta configuração funcione, o modulo res_pjsip_config_wizard.so deve estar instalado e carregado. Este modulo está disponível&amp;nbsp;desde o&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™&lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;13.2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&amp;nbsp;- Configurando o&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: arial;&quot;&gt;Asterisk® SCF™ &lt;/b&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;para fazer e receber chamadas:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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&amp;nbsp;para seus requisitos e mapeados para os seguintes campos:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div&gt;[defaults_user](!)&lt;/div&gt;&lt;div&gt;type = wizard&amp;nbsp;&lt;/div&gt;&lt;div&gt;accepts_registrations = yes&amp;nbsp;&lt;/div&gt;&lt;div&gt;sends_registrations = no&amp;nbsp;&lt;/div&gt;&lt;div&gt;accepts_auth = yes&amp;nbsp;&lt;/div&gt;&lt;div&gt;sends_auth = no&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/context = from-internal&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/allow = !all,ulaw,alaw,G729,G722&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/dtmf_mode = rfc4733&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/rewrite_contact = yes&amp;nbsp;&lt;/div&gt;&lt;div&gt;endpoint/force_rport = yes&amp;nbsp;&lt;/div&gt;&lt;div&gt;aor/max_contacts = 1&amp;nbsp;&lt;/div&gt;&lt;div&gt;aor/remove_existing = yes&amp;nbsp;&lt;/div&gt;&lt;div&gt;aor/minimum_expiration = 30&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;95566&lt;/div&gt;&lt;div&gt;endpoint/callerid = Peter Parker &amp;lt;95566&amp;gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;inbound_auth/username = P3t35P4k35$&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div&gt;inbound_auth/password = P3t35P4k35$&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Depois que temos o modelo &quot;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;(!)&lt;/span&gt;&lt;/b&gt;&quot;, configurar um novo endpoint geralmente é tão simples quanto configurar um nome de usuário/senha, pois o objeto endpoint herda do modelo &quot;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;(!)&lt;/span&gt;&lt;/b&gt;&quot; criado em pjsip_wizard. Você nem precisará especificar um tipo. Veja os seguintes exemplos:&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;div&gt;[Parker](user_defaults)&amp;nbsp;&lt;/div&gt;&lt;div&gt;hint_exten = 95566&lt;/div&gt;&lt;div&gt;endpoint/callerid = Peter Parker &amp;lt;95566&amp;gt;&lt;/div&gt;&lt;div&gt;inbound_auth/username = P3t35P4k35$&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div&gt;inbound_auth/password = P3t35P4k35$&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;div&gt;[Diana](user_defaults)&amp;nbsp;&lt;/div&gt;&lt;div&gt;hint_exten = 95567&lt;/div&gt;&lt;div&gt;endpoint/callerid = Diana de Themyscira &amp;lt;95567&amp;gt;&lt;/div&gt;&lt;div&gt;endpoint/allow = !all,ulaw&lt;/div&gt;&lt;div&gt;inbound_auth/username = D14N4&lt;/div&gt;&lt;div&gt;inbound_auth/password = D14N4&lt;/div&gt;&lt;div&gt;;has_phoneprov = yes ;--&amp;gt; Padrão é não&lt;/div&gt;&lt;div&gt;;phoneprov/MAC = 00:1B:C9:4B:E3:57 ;--&amp;gt; deve especificar se has_phoneprov=yes;&lt;/div&gt;&lt;div&gt;;phoneprov/PROFILE = profile1 ;--&amp;gt; deve especificar se has_phoneprov=yes&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&amp;nbsp;- Concluindo a configuração básica do PJSIP&lt;/span&gt;&lt;span style=&quot;font-family: arial; text-align: justify;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;div&gt;[global]&amp;nbsp;&lt;/div&gt;&lt;div&gt;type = global&lt;/div&gt;&lt;div&gt;user_agent = PBX IP&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;[transport-udp-nat]&amp;nbsp;&lt;/div&gt;&lt;div&gt;type = transport&amp;nbsp;&lt;/div&gt;&lt;div&gt;protocol = udp&amp;nbsp;&lt;/div&gt;&lt;div&gt;bind = 0.0.0.0:5060&amp;nbsp;&lt;/div&gt;&lt;div&gt;local_net = X.X.X.X/24&amp;nbsp;&lt;/div&gt;&lt;div&gt;external_media_address = X.X.X.X&amp;nbsp;&lt;/div&gt;&lt;div&gt;external_signaling_address = X.X.X.X&amp;nbsp;&lt;/div&gt;&lt;div&gt;allow_reload = no&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Caso o Softswitch PBX IP não esteja em uma rede NAT, você pode remover com segurança (ou comentar) os seguintes parâmetros: &lt;b&gt;external_media_address&lt;/b&gt; e &lt;b&gt;external_signaling_address&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;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.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;b&gt;5&lt;/b&gt; -&amp;nbsp;&lt;/span&gt;Configurar o Dialplan&lt;span style=&quot;text-align: justify;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;O&amp;nbsp;&lt;/span&gt;&lt;b&gt;Asterisk® SCF™ &lt;/b&gt;faz uso dos Dialplans desenvolvidos em &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;/etc/asterisk/extensions.conf&lt;/span&gt;&lt;/b&gt;, ou &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.ael&lt;/span&gt;&lt;/b&gt;, e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.lua&lt;/span&gt;&lt;/b&gt;, 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 &lt;b&gt;extension.conf&lt;/b&gt; e adicionar as seguintes linhas de código:&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;div&gt;[from-pstn]&amp;nbsp;&lt;/div&gt;&lt;div&gt;exten =&amp;gt; _+55XXXXXXXXXXX,1,Dial(PJSIP/94455)&amp;nbsp;&lt;/div&gt;&lt;div&gt;exten =&amp;gt; _XX9XXXXXXXX,1,Dial(PJSIP/94455)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[from-internal]&amp;nbsp;&lt;/div&gt;&lt;div&gt;exten = _119XXXXXXXX,1,Dial(PJSIP/${EXTEN}@srvchansip)&amp;nbsp;&lt;/div&gt;&lt;div&gt;same = n,Hangup()&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;exten = _X.,1,Dial(PJSIP/${EXTEN}@srvchansip)&amp;nbsp;&lt;/div&gt;&lt;div&gt;same = n,Hangup()&lt;/div&gt;&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;[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.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;[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).&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;IMPORTANTE! Se você quiser fazer seu tronco baseado em TECH PREFIX para autenticar, isso deve ser implementado no Dialplan.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Por exemplo, se você configurou o TEC PREFIX para &quot;9999&quot; no Softswitch PBX IP (modulo chan_sip.so), seu bloco [from-internal] deve ficar assim:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: start;&quot;&gt;[from-internal]&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: start;&quot;&gt;exten = _119XXXXXXXX,1,Dial(PJSIP/9999${EXTEN}@srvchansip)&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: start;&quot;&gt;same = n,Hangup()&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: start;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: start;&quot;&gt;exten = _X.,1,Dial(PJSIP/9999${EXTEN}@srvchansip)&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: start;&quot;&gt;same = n,Hangup()&lt;/div&gt;&lt;div style=&quot;text-align: start;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: start;&quot;&gt;É isso! Você concluiu a configuração dos servidores baseados em&amp;nbsp;&lt;b&gt;Asterisk® SCF™ &lt;/b&gt;e agora pode fazer e receber chamadas entre eles.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/241643555338885342/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/241643555338885342' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/241643555338885342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/241643555338885342'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2022/02/channel-pjsip-channel-sip-configurando.html' title='Channel PJSIP &lt; == &gt; Channel SIP (Configurando um Tronco IP)'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEje06j0ZTRopbGC93-6Z2ec0Uhr6t8TlAOjhbiYMrqGqfzH0vWLSMdEnpBEUa6o8VSWPnCz9PpC1s6QByuFJq7_zjiw3HZPoNMhPQtd4ruWSDqhI_6o3M9mvpnjb18E0zJdgRTE0Md8gk0Nd59Y2IAfsY-mLWOOySEct00o58VFXxMpZ558GqXC6ttl=s72-w400-h229-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-1486382022842880298</id><published>2021-04-20T14:30:00.002-10:00</published><updated>2021-06-18T06:45:19.473-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><title type='text'>Asterisk Extension Language - AEL (Parte 01)</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY9HcpAXl51i1HuIuVK1kLvUP2z8-1dBVu6ycX2mJ5ZTJe8z12rARsEP_3SFc0FcQ6wnYR_3PmEkMM2ZaPJP3Bu04KNC9nrVyhKSAURCIGEXPY0j7c1P-EAKJcvWoORJR6iDVjPvzPGUo/s641/Dialplan_AEL.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;289&quot; data-original-width=&quot;641&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY9HcpAXl51i1HuIuVK1kLvUP2z8-1dBVu6ycX2mJ5ZTJe8z12rARsEP_3SFc0FcQ6wnYR_3PmEkMM2ZaPJP3Bu04KNC9nrVyhKSAURCIGEXPY0j7c1P-EAKJcvWoORJR6iDVjPvzPGUo/s16000/Dialplan_AEL.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A Sangoma Digium, por meio da sua equipe de desenvolvimento do Asterisk® SCF™, vem recebendo fortes pressões para adicionar recursos ao &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.conf&lt;/b&gt;&lt;/span&gt; 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.).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Começando:&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O analisador AEL (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;pbx_ael.so&lt;/b&gt;&lt;/span&gt;) é completamente separado do módulo que analisa o &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.conf&lt;/b&gt;&lt;/span&gt; (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_config.so&lt;/span&gt;&lt;/b&gt;). 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 &quot;autoload=yes&quot; (que não é recomendado) em &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;/etc/asterisk/modules.conf&lt;/b&gt;&lt;/span&gt;. Quando o módulo for carregado, ele procurará por extensions.ael em &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;/etc/asterisk/&lt;/b&gt;&lt;/span&gt;. Ambos &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.conf&lt;/b&gt;&lt;/span&gt; e &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.ael&lt;/b&gt;&lt;/span&gt; pode ser usados em conjunto um com o outro, se isso for desejado. Alguns &lt;b&gt;Engenheiros de Sistemas em Telecomunicações NGN&lt;/b&gt;, podem querer manter &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.conf&lt;/span&gt;&lt;/b&gt; para usar os recursos que são configurados na seção &quot;[GENERAL]&quot;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Recarregando extensions.ael:&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Para recarregar o extensions.ael, o seguinte comando pode ser emitido no *CLI&amp;gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;*CLI&amp;gt; ael reload&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Depurando:&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Habilitar depuração de contextos do AEL;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;*CLI&amp;gt; ael debug contexts&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Habilitar depuração de macros do AEL;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;*CLI&amp;gt; ael debug macros&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Habilitar depuração de leitura do AEL;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;*CLI&amp;gt; ael debug read&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Habilitar depuração de tokens do AEL;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;*CLI&amp;gt; ael debug tokens&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Desativar mensagens de depuração do AEL;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;*CLI&amp;gt; ael no debug&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Comentários:&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;As linhas que começam com barra dupla (//) são comentários.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Exemplo: // Este é um comentário.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Contexto:&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Os contextos em AEL representam um conjunto de extensões da mesma forma que o fazem em extensions.conf (CONF).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; color: #414141; font-size: 14px; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;context internal_pbx_extensions {&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style=&quot;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;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;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;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;};&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;OBS&lt;/b&gt;: A chave de abertura deve aparecer como acima. Movê-la para a linha seguinte pode ter consequências desastrosas.&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;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;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Extensões&lt;/span&gt;:&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;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.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;br /&gt;context internal_pbx_extensions {&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;_10XX =&amp;gt; {&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Verbose(Comutação Interna entre Extensions);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Wait(0.2);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Dial(PJSIP/${EXTEN},45,rTtHhKkwo);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;if(&quot;${DIALSTATUS}&quot;==&quot;BUSY&quot;) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Playback(call-sorry&amp;amp;is-in-use&amp;amp;call-goodbye);&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;};&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;HangUp();&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;_80XX =&amp;gt; {&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Dial(PJSIP/${EXTEN},45,rTtHhKkwo);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Verbose(Comutação entre servidores);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Dial(PJSIP/TRUNK-SRV-SP/${EXTEN},45,rTtHhKkwo);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;if(&quot;${DIALSTATUS}&quot;==&quot;BUSY&quot;) {&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Verbose(Encaminhamento Incondicional);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Playback(one-moment-please);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;goto internal_pbx_extensions|5099|1;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;HangUp();&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;_5XXX =&amp;gt; {&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Verbose(Comutação para a Telefonista);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Dial(IAX2/TRUNK-SRV-SP/${EXTEN},45,rTtHhKkwo);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;if(&quot;${DIALSTATUS}&quot;==&quot;BUSY&quot;) {&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Playback(call-sorry&amp;amp;is-in-use&amp;amp;call-goodbye);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;HangUp();&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;};&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;HangUp();&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;h =&amp;gt; {&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;Verbose(//----&amp;gt; Chamada encerrada...: ORIG-${CALLERID(num)});&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Inclui:&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Os contextos podem ser incluídos em outros contextos. Todos os contextos incluídos são listados em um único bloco.&lt;/div&gt;&lt;br /&gt;context internal_pbx_extensions {&lt;br /&gt;   &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;includes {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;chamadas_local;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;chamadas_ddd;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;chamadas_ddi;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;br /&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Dialplan Switches:&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Os switches são listados em seu próprio bloco dentro de um contexto.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;context internal_pbx_extensions {&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;switches {&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;DUNDi/e164;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;IAX2/TRUNK-SRV-SP;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;eswitches {&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;IAX2/context@${CURSERVER};&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;};&lt;/div&gt;&lt;div&gt;};&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Ignore Padrão (ignorepat):&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;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 (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;pattern&lt;/b&gt;&lt;/span&gt;). O exemplo mais comumente usado é &#39;9&#39;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;context&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;chamadas_local {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ignorepat=&amp;gt; 9;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;OBS&lt;/b&gt;: A chave de abertura deve aparecer como acima. Movê-la para a linha seguinte pode ter consequências desastrosas.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Variáveis:&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;As variáveis no&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Asterisk® SCF™ não têm um tipo, então para definir uma variável, ela só precisa ser especificada com um valor.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;As variáveis podem ser definidas nas extensões.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;context&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;chamadas_local {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; _92929XXXX =&amp;gt; {&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; Set(ignore_pattern=9); // definindo uma variável.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;ignorepat=&amp;gt; ${ignore_pattern}; // usando a variável.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Variáveis globais são definidas em seu próprio bloco.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;globals {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; CONSOLE=Console/dsp;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; TRUNK-GOIP=DAHDI/g2;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;OBS&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;: A chave de abertura deve aparecer como acima. Movê-la para a linha seguinte pode ter consequências desastrosas.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/1486382022842880298/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/1486382022842880298' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/1486382022842880298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/1486382022842880298'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2021/04/asterisk-extension-language-ael-parte-01.html' title='Asterisk Extension Language - AEL (Parte 01)'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY9HcpAXl51i1HuIuVK1kLvUP2z8-1dBVu6ycX2mJ5ZTJe8z12rARsEP_3SFc0FcQ6wnYR_3PmEkMM2ZaPJP3Bu04KNC9nrVyhKSAURCIGEXPY0j7c1P-EAKJcvWoORJR6iDVjPvzPGUo/s72-c/Dialplan_AEL.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-2253055434092077319</id><published>2021-02-25T09:31:00.001-10:00</published><updated>2021-02-25T09:32:15.818-10:00</updated><title type='text'>Protocolo SIP - Mensagens 180 x 183 x Early Media </title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDkrd9pLDhJGumYp6nPlFlmIkT559kkOfljJ0EpZmSGRu9E-4XJFXdCsKePYq1LPu4bvSOut_GiUsQqG28sO4Pvzrwm7X3S7KP5h1Rc4cPq25V9QkHeigdX6FwdsQShhADk6jFfT8nZvk/s1192/SIP-Trunk-Providers.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1130&quot; data-original-width=&quot;1192&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDkrd9pLDhJGumYp6nPlFlmIkT559kkOfljJ0EpZmSGRu9E-4XJFXdCsKePYq1LPu4bvSOut_GiUsQqG28sO4Pvzrwm7X3S7KP5h1Rc4cPq25V9QkHeigdX6FwdsQShhADk6jFfT8nZvk/s320/SIP-Trunk-Providers.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Uma chamada SIP básica, estabelecida com sucesso, quando aceita pelo receptor, tem a resposta final &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;200 OK&lt;/span&gt;&lt;/b&gt;, 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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV9qldMHfCPhtHdy6mWGKbSFhc4USLryqbpaqx_ox7x5R1ib2wvIzKMloAsGgQYrgVKdMapr6y_jgfWFfq4On4rmIYX9-z0XsEvkE1q7GDNwz3j7N11mYoTKmxmC1nN4cq2zDCDmj25uw/s600/early-media.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;300&quot; data-original-width=&quot;600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV9qldMHfCPhtHdy6mWGKbSFhc4USLryqbpaqx_ox7x5R1ib2wvIzKMloAsGgQYrgVKdMapr6y_jgfWFfq4On4rmIYX9-z0XsEvkE1q7GDNwz3j7N11mYoTKmxmC1nN4cq2zDCDmj25uw/s16000/early-media.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-small;&quot;&gt;&lt;i&gt;Fonte em referencias.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;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.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Portanto, o fluxo de mídia antes do estabelecimento da chamada é considerado &lt;b&gt;mídia inicial&lt;/b&gt;. Não é a voz da pessoa com quem você deseja falar, mas sim &lt;b&gt;tons do sistema&lt;/b&gt;, &lt;b&gt;anúncios&lt;/b&gt; ou &lt;b&gt;qualquer som&lt;/b&gt; 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 &lt;b&gt;Dialplan&lt;/b&gt;. Isto ocorre com frequência, e se seu &lt;b&gt;Dialplan&lt;/b&gt;, não tem uma tratativa correta, o &lt;b&gt;app_dial.c&lt;/b&gt; vai estacionar a chamada, ou seja vai executar o&amp;nbsp;&lt;/span&gt;res_musiconhold.c.&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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:&lt;/div&gt;&lt;blockquote&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O número discado não está disponível no momento, tente novamente mais tarde.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;180 Ringing&lt;/h2&gt;Conforme declarado na Bíblia SIP RFC3261, 180 é usado para alertar o UA chamador que recebeu um INVITE e está tocando.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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).&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Vale ressaltar que as mesmas coisas acontecem quando alguma mensagem do tipo&amp;nbsp; 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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;183 Session Progress&lt;/h2&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNffpo4TstEThoxLcj-_ZwMmQww-R4meAm2ZUXm2ofk8W3t8NCZlvXPiBC15_vht0lFOKOFRvXm5yULe5nFKbECar_uKy0hzI4pmM5ZdrDn2KMR8_jcy89-DX7IIJtqo_dr5mT71DyeHE/s600/early-media_2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;346&quot; data-original-width=&quot;600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNffpo4TstEThoxLcj-_ZwMmQww-R4meAm2ZUXm2ofk8W3t8NCZlvXPiBC15_vht0lFOKOFRvXm5yULe5nFKbECar_uKy0hzI4pmM5ZdrDn2KMR8_jcy89-DX7IIJtqo_dr5mT71DyeHE/s16000/early-media_2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;i&gt;&lt;i style=&quot;font-family: georgia; font-size: small;&quot;&gt;Fonte em referencias&amp;nbsp;&lt;/i&gt;&lt;/i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;- Early Media with SIP 183 response.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;A resposta 183 contém corpo SDP e é geralmente usada em 3 casos:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ol&gt;&lt;li&gt;Fazendo um &lt;b&gt;RINGBACK&lt;/b&gt; 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.&lt;/li&gt;&lt;li&gt;Simplesmente reproduzir um som de mensagem de erro e, em seguida, desligar como afirmei acima.&lt;/li&gt;&lt;li&gt;Para a implementação de uma resposta de voz interativa: os tons DTMF podem ser reunidos junto com os pacotes de mídia.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;É sobre a mídia antiga, simples, não é?&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Detecting Early Media&lt;/h2&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Isso é sobre a mídia inicial, é simples,&amp;nbsp; 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 &lt;b&gt;RINGBACK&lt;/b&gt; 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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;E graças ao &lt;b&gt;RFC3960&lt;/b&gt;, algumas políticas para essas bagunças são recomendadas:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;A menos que uma resposta 180 (toque) seja recebida, nunca gere toque local (&lt;b&gt;RINGING&lt;/b&gt;);&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;Se um 180 (&lt;b&gt;RINGING&lt;/b&gt;) foi recebido, mas não há pacotes de mídia de entrada, gere toque local (&lt;b&gt;RINGING&lt;/b&gt;);&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;Se um 180 (&lt;b&gt;RINGING&lt;/b&gt;) foi recebido e há pacotes de mídia de entrada, reproduza-os e não gere toque local (&lt;b&gt;RINGING&lt;/b&gt;).&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Essas políticas não são definidas como padrão a ser seguido em todos os dispositivos SIP, mas simplesmente afirmam:&lt;/div&gt;&lt;div&gt;&lt;blockquote style=&quot;text-align: justify;&quot;&gt;Qualquer UA deve reproduzir pacotes de mídia de entrada (e interromper a geração de tom de toque local se estiver sendo executado).&lt;/blockquote&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;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).&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;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.&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Referências:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://andrewjprokop.wordpress.com/2014/04/18/sip-media-management-early-media-vs-late-media/&quot; target=&quot;_blank&quot;&gt;Andrew J. Prokop&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://tools.ietf.org/html/rfc3960&quot; target=&quot;_blank&quot;&gt;Tools IETF: RFC3960&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://tools.ietf.org/html/rfc3261&quot; target=&quot;_blank&quot;&gt;Tools IETF: RFC3261&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;/span&gt;&lt;/div&gt;Tkat&#39;s All Folks! (É por hoje é só, pessoal!).&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/2253055434092077319/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/2253055434092077319' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/2253055434092077319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/2253055434092077319'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2021/02/protocolo-sip-mensagens-180-x-183-x.html' title='Protocolo SIP - Mensagens 180 x 183 x Early Media '/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDkrd9pLDhJGumYp6nPlFlmIkT559kkOfljJ0EpZmSGRu9E-4XJFXdCsKePYq1LPu4bvSOut_GiUsQqG28sO4Pvzrwm7X3S7KP5h1Rc4cPq25V9QkHeigdX6FwdsQShhADk6jFfT8nZvk/s72-c/SIP-Trunk-Providers.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-5920710789060186895</id><published>2021-01-06T01:12:00.002-10:00</published><updated>2021-01-06T01:12:23.144-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Debian"/><category scheme="http://www.blogger.com/atom/ns#" term="GNU/Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Novo repositorio key para WineHQ - Debian e seus Forks</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQkvFV1m8vRlaVTsx7g03GHu03v08aU9i19b0504Q6iJJIiy8G20j0F42JADNg6awnOsyG2-_2sdi91mxN1GrjMrEh0cfLIOrvIBxuHd8j3yWbCEQmkPZnJai790JrDEtyEF8Of9namD0/s900/GNU_Linux.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;600&quot; data-original-width=&quot;900&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQkvFV1m8vRlaVTsx7g03GHu03v08aU9i19b0504Q6iJJIiy8G20j0F42JADNg6awnOsyG2-_2sdi91mxN1GrjMrEh0cfLIOrvIBxuHd8j3yWbCEQmkPZnJai790JrDEtyEF8Of9namD0/s320/GNU_Linux.jpeg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;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:&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;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 &#39;https://dl.winehq.org/wine-builds/ubuntu bionic InRelease&#39; is not signed.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Para resolver este erro, faça um acesso a sua pasta root (ou o lugar onde se encontra o arquivo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;winehq&lt;span&gt;.key&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;Caso não saiba onde se encontra esse arquivo execute o comando a seguir:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: #800180;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span&gt;# find / -name winehq.key&lt;br /&gt;/root/winehq.key&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;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.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #800180;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span&gt;# rm -rf&amp;nbsp; &lt;/span&gt;&lt;span&gt;/root/winehq.key&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;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&lt;span&gt;&lt;span&gt;q.key) e adicioná-la ao sistema APT, ou você continuara a receber a mensagem de erro sobre a chave ausente.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span&gt;&lt;span&gt;Para baixar e instalar a nova chave:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #800180;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# cd /root&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #800180;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# wget -nc https://dl.winehq.org/wine-builds/winehq.key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #800180;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# sudo apt-key add winehq.key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #800180;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #800180;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Recebendo o &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;OK&lt;/b&gt;&lt;/span&gt;, execute:&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #800180;&quot;&gt;# sudo apt update &amp;amp;&amp;amp; apt upgrade &amp;amp;&amp;amp; apt dist-upgrade&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;b style=&quot;background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Tkat&#39;s All Folks!&lt;/b&gt;&amp;nbsp;(É por hoje é só, pessoal!).&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/5920710789060186895/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/5920710789060186895' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/5920710789060186895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/5920710789060186895'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2021/01/novo-repositorio-key-para-winehq-debian.html' title='Novo repositorio key para WineHQ - Debian e seus Forks'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQkvFV1m8vRlaVTsx7g03GHu03v08aU9i19b0504Q6iJJIiy8G20j0F42JADNg6awnOsyG2-_2sdi91mxN1GrjMrEh0cfLIOrvIBxuHd8j3yWbCEQmkPZnJai790JrDEtyEF8Of9namD0/s72-c/GNU_Linux.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-2394464129779147364</id><published>2020-12-26T07:39:00.001-10:00</published><updated>2020-12-26T07:39:21.026-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="Dialplan LUA"/><title type='text'>Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 03) - Final. </title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;Criado por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Matthew Nicholson&lt;/b&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;, modificado pela última vez por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Rusty Newton&lt;/b&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;, tradução técnica e adaptação para o Brasil por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Angelo Delphini&lt;/b&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s1024/AstLUA-BR.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s320/AstLUA-BR.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Dialplan LUA: Hints&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;No&amp;nbsp;Asterisk® SCF™&amp;nbsp;versão 10 e superiores, as dicas (HINTS) do Dialplan (&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.lua&lt;/span&gt;&lt;/b&gt;) podem ser especificadas de maneira semelhante à maneira como as extensões são especificadas em Dialplan CONF e AEL.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter  java&quot; id=&quot;highlighter_756496&quot; style=&quot;font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1253px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;hints = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;= {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;office = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;500&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/500&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;home = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;200&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/200&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number12 index11 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;201&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/201&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number13 index12 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number14 index13 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;.&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Dialplan LUA: Exemplos&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Menos desordem&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Em vez de definir cada extensão em linha, você pode usar este método para criar um arquivo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.lua&lt;/span&gt;&lt;/b&gt; 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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter  java&quot; id=&quot;highlighter_999854&quot; style=&quot;font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;--&amp;nbsp;&lt;/code&gt;esta função serve como uma função de extensão diretamente --&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function call_user(c, user)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/&quot;&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;.. user,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;60&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;--&amp;nbsp;&lt;/code&gt;esta função retorna uma função de extensão --&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function call_sales_queue(queue)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;return&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function(c, e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.queue(queue)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number12 index11 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number13 index12 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number14 index13 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number15 index14 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;= {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number16 index15 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;.include = {&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;users&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number17 index16 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number18 index17 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.users = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number19 index18 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.users[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] = call_user&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number20 index19 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.users[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;101&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] = call_user&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number21 index20 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number22 index21 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.sales = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number23 index22 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.sales[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;5000&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] = call_sales_queue(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales1&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number24 index23 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;e.sales[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;6000&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] = call_sales_queue(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales2&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number25 index24 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number26 index25 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions = e&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Less Clutter v2&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Neste exemplo, usamos uma função sofisticada para registrar extensões.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter  java&quot; id=&quot;highlighter_227968&quot; style=&quot;font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function register(context, extension, func)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;if&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;not extensions then&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;if&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;not extensions[context] then&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions[context] = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions[context][extension] = func&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number12 index11 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number13 index12 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function include(context, included_context)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number14 index13 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;if&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;not extensions then&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number15 index14 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number16 index15 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number17 index16 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number18 index17 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;if&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;not extensions[context] then&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number19 index18 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions[context] = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number20 index19 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number21 index20 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number22 index21 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;if&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;not extensions[context].include then&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number23 index22 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions[context].include = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number24 index23 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number25 index24 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number26 index25 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;table.insert(extensions[context].include, included_context)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number27 index26 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number28 index27 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number29 index28 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;--&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;this&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function serves as an extension function directly&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number30 index29 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function call_user(c, user)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number31 index30 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/&quot;&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;.. user,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;60&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number32 index31 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number33 index32 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number34 index33 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;--&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;this&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function returns an extension function&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number35 index34 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function call_sales_queue(queue)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number36 index35 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;return&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function(c, e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number37 index36 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.queue(queue)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number38 index37 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number39 index38 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number40 index39 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number41 index40 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;include(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;default&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;users&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number42 index41 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;include(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;default&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number43 index42 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number44 index43 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;register(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;users&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;, call_user)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number45 index44 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;register(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;users&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;101&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;, call_user)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number46 index45 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number47 index46 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;register(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;5000&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;, call_sales_queue(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales1&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;))&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number48 index47 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;register(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;6000&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;, call_sales_queue(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales2&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;))&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number49 index48 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;register(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;7000&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;, function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number50 index49 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.queue(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;sales3&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number51 index50 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Tópicos avançados em pbx_lua&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Nos bastidores, uma série de coisas acontecem para tornar a integração de LUA ao Asterisk® SCF™&amp;nbsp;a mais perfeita possível. Alguns detalhes de como funciona essa integração podem ser encontrados a seguir.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;extensions.lua Processo de carga&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O arquivo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.lua&lt;/span&gt;&lt;/b&gt; é carregado na memória uma vez quando o módulo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt; é 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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 14px; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;&quot;&gt;&lt;b&gt;Provavelmente&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&amp;nbsp;é uma má ideia.&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter  java&quot; id=&quot;highlighter_925503&quot; style=&quot;font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;-- minha fantasia em extensions.lua --&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;= {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;--&amp;nbsp;&lt;/code&gt;&lt;span style=&quot;background-color: initial; white-space: nowrap;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;pode ser uma má ideia, isto será executado sempre que um canal for criado --&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;data = query_webservice_for_extensions_list(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;site1&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;for&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;_, e in ipairs(data)&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;do&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[e.exten] = function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/&quot;&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;.. e.sip_peer, e.dial_timeout)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number12 index11 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number13 index12 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;A mesa de extensions&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;A tabela extensions é uma tabela LUA padrão e pode ser definida como você quiser. O módulo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt; 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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;context_table = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extension1 = function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extension2 = function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Para onde foram as prioridades?&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Não há prioridades. O Asterisk® SCF™&amp;nbsp;usa prioridades para definir a ordem em que ocorrem as operações do Dialplan. O módulo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt; 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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt; 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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;GoTo(default,1234,1)&lt;/span&gt;&lt;/b&gt;. Você só faria referência a extensões desta forma de fora de &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt; (ou seja, de &lt;b&gt;extensions.conf&lt;/b&gt; ou &lt;b&gt;extensions.ael&lt;/b&gt;). Com &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt; você pode apenas executar a função dessa extensão.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;1234&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;](&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;default&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;1234&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Lua Script Lifetime&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O mesmo estado de LUA é usado durante o tempo de vida do canal do Asterisk® SCF™&amp;nbsp;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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Aplicativos, funções e variáveis&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Detalhes sobre como acessar aplicações e funções do Dialplan LUA e variáveis ​​de canal podem ser encontrados na página &lt;a href=&quot;https://www.delphini.com.br/2020/12/asterisk-scf-lua-configuracao-do-lua_25.html&quot; target=&quot;_blank&quot;&gt;Interagindo com o Asterisk® SCF™&amp;nbsp;LUA&lt;/a&gt; (aplicativos, variáveis ​​e funções) .&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;:get( )&lt;/span&gt;&lt;/b&gt; e &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;:set( )&lt;/span&gt;&lt;/b&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;b&gt;Variável de canal (channel): var é o objeto do espaço reservado&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter  java&quot; id=&quot;highlighter_30582&quot; style=&quot;font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;var = channel.my_variable&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;var:set(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;my value&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = var:get(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;my value&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;b&gt;Função Dialplan: fax_modems é o objeto placeholder&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter  java&quot; id=&quot;highlighter_959206&quot; style=&quot;font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;fax_modems = channel.FAXOPT(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;module&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;-- the function arguments are stored in the placeholder&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;fax_modems:set(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;v17&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = fax_modems:get()&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;b&gt;Aplicação Dialplan: Dial é o objeto placeholder&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter  java&quot; id=&quot;highlighter_631636&quot; style=&quot;font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;dial = app.dial&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;-- the only thing we can&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;do&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;with it is execute it&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&lt;b style=&quot;background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Tkat&#39;s All Folks!&lt;/b&gt;&amp;nbsp;(É por hoje é só, pessoal!).&lt;/div&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&lt;br style=&quot;outline: 0px; transition: all 0.3s ease 0s;&quot; /&gt;&lt;/div&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html&quot; style=&quot;background: 0px 0px; border: 0px; color: #446cb3; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;Aprenda Lua em 15 minutos!&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;span style=&quot;background: 0px 0px white; border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://t.me/asteriskluabr&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #446cb3; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;https://t.me/asteriskluabr&lt;/a&gt;&lt;span style=&quot;background: 0px 0px white; border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;).&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/2394464129779147364/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/2394464129779147364' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/2394464129779147364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/2394464129779147364'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2020/12/asterisk-scf-lua-configuracao-do-lua_26.html' title='Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 03) - Final. '/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s72-c/AstLUA-BR.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-6287488939161688705</id><published>2020-12-25T08:50:00.003-10:00</published><updated>2020-12-26T07:39:40.737-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="Dialplan LUA"/><title type='text'>Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 02)</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;Criado por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Matthew Nicholson&lt;/b&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;, modificado pela última vez por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Rusty Newton&lt;/b&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;, tradução técnica e adaptação para o Brasil por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Angelo Delphini&lt;/b&gt;&lt;span style=&quot;background-color: white; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s1024/AstLUA-BR.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s320/AstLUA-BR.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Interagindo com o&amp;nbsp;Asterisk® SCF™&amp;nbsp;Dialplan LUA (aplicativos, variáveis ​​e funções)&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;A é feita com interação por meio de uma série de objetos predefinidos fornecidos por &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt;. A tabela &lt;b&gt;app&lt;/b&gt; é usada para &lt;b&gt;acessar&lt;/b&gt; aplicativos do Dialplan. Qualquer aplicativo do&amp;nbsp;Asterisk® SCF™&amp;nbsp;pode ser &lt;b&gt;acessado&lt;/b&gt; e &lt;b&gt;executado&lt;/b&gt; como se fosse uma &lt;b&gt;função&lt;/b&gt; anexada à tabela &lt;b&gt;app&lt;/b&gt;. &lt;b&gt;Variáveis&lt;/b&gt; ​​e &lt;b&gt;funções&lt;/b&gt; do Dialplan são acessadas e executadas através da tabela &lt;b&gt;channel&lt;/b&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conflitos de nomenclatura entre LUA e&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;Asterisk® SCF™&lt;/span&gt;&lt;/h3&gt;Aplicativos do&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;Asterisk® SCF™&lt;/span&gt;, &lt;b&gt;variáveis&lt;/b&gt; ​​ou &lt;b&gt;funções&lt;/b&gt; cujos nomes entram em &lt;b&gt;conflito&lt;/b&gt; com palavras &lt;b&gt;reservadas&lt;/b&gt; de LUA ou contêm caracteres especiais devem ser referenciados usando o&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt; [ ]&lt;/span&gt;&lt;/b&gt; operador. Por exemplo, LUA 5.2 introduziu a GoTo instrução de controle que conflita com a aplicação GoTo() do Dialplan do&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;Asterisk® SCF™&lt;/span&gt;. Então...&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O seguinte fará com que &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua.so&lt;/span&gt;&lt;/b&gt; falhe ao carregar com LUA 5.2 ou posterior porque &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;GoTo&lt;/span&gt;&lt;/b&gt; é uma palavra reservada.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;goto&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;default&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;1000&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;A seguinte instrução funcionará com todas as versões LUA e o Dialplan do&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;Asterisk® SCF™.&lt;/span&gt;&lt;div&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;goto&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;](&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;default&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;1000&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Aplicativos do Dialplan&lt;/h3&gt;&lt;div&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_798457&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.playback(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;please-hold&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;, nil,&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;m&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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 &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;app.HangUp( )&lt;/span&gt;&lt;/b&gt; do que &lt;b&gt;app.hangup( )&lt;/b&gt;. 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 &lt;b&gt;string&lt;/b&gt; devem ser colocados entre &lt;b&gt;aspas&lt;/b&gt;, pois são &lt;b&gt;strings&lt;/b&gt;&amp;nbsp;LUA. Argumentos vazios podem ser passados ​​como strings vazias,&lt;b&gt; nil&lt;/b&gt; ou &lt;b&gt;empty&lt;/b&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Variáveis ​​de Canal&lt;/h3&gt;&lt;div&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;b style=&quot;color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;Definir uma&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;background-color: transparent; font-size: 14px;&quot;&gt;&lt;span face=&quot;Helvetica Neue, Helvetica, Arial, sans-serif&quot; style=&quot;color: #333333;&quot;&gt;&lt;b&gt;variável&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_253781&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;channel.my_variable =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;my_value&quot;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; vertical-align: inherit;&quot;&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;Depois disso, a variável de canal&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px;&quot;&gt;${my_variable&lt;/code&gt;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; vertical-align: inherit;&quot;&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;} contém o valor &quot;my_value&quot;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; vertical-align: inherit;&quot;&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;b style=&quot;color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;Lendo uma&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;background-color: transparent; font-size: 14px;&quot;&gt;&lt;span face=&quot;Helvetica Neue, Helvetica, Arial, sans-serif&quot; style=&quot;color: #333333;&quot;&gt;&lt;b&gt;variável&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_24415&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = channel.my_variable:get()&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Qualquer variável de canal pode ser lida e configurada usando a tabela &lt;b&gt;channel&lt;/b&gt;. Variáveis LUA, &lt;b&gt;locais&lt;/b&gt; e &lt;b&gt;globais&lt;/b&gt; podem ser usadas como normalmente fariam e não estão completamente relacionadas com variáveis ​​de canal.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;A seguinte instrução NÃO funcionará.&lt;div&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = channel.my_variable&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;-- não funciona como o esperado --&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code class=&quot;java plain&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;-- (value:get()&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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;&quot;&gt;&lt;span style=&quot;font-family: Consolas, Bitstream Vera Sans Mono, Courier New, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: nowrap;&quot;&gt;pode ser usado para obter o valor após esta linha) --&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Se o nome da variável for uma palavra reservada para LUA ou contiver caracteres que LUA considera especiais, devemos usar o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;[ ]&lt;/span&gt;&lt;/b&gt; operador para acessá-los.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;channel[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;my_variable&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;my_value&quot;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = channel[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;my_variable&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;]:get()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Funções Dialplan&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;b&gt;Escrevendo uma função no Dialplan&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_999749&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;channel.FAXOPT(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;modems&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;):set(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;v17,v27,v29&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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;&quot;&gt;&lt;b&gt;Lendo uma função do Dialplan&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_408171&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = channel.FAXOPT(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;modems&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;):get()&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;&quot;&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;Observe o uso do&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start;&quot;&gt;:&lt;/code&gt;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;&quot;&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;operador com os&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;métodos&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;get()&amp;nbsp;&lt;/code&gt;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;&quot;&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;e&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;set()&lt;/code&gt;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;&quot;&gt;&lt;span style=&quot;vertical-align: inherit;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Se o nome da função for uma palavra reservada para LUA ou contiver caracteres que LUA considera especiais, devemos usar o &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;[ ]&lt;/span&gt;&lt;/b&gt; operador para acessá-los.&lt;/div&gt;&lt;h3&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;channel[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;FAXOPT(modems)&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;v17,v27,v29&quot;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = channel[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;FAXOPT(modems)&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;]:get()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;As seguintes instruções NÃO funcionarão.&lt;/span&gt;&lt;/div&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;channel.FAXOPT(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;modems&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;) =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;v17,v27,v29&quot;&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;-- erro de sintaxe --&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;value = channel.FAXOPT(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;modems&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -- não funciona como esperado --&amp;nbsp;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;-- (value:get()&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;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;&quot;&gt;&lt;span style=&quot;font-family: Consolas, Bitstream Vera Sans Mono, Courier New, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; font-weight: 400; white-space: nowrap;&quot;&gt;pode ser usado para obter o valor após esta linha&lt;/span&gt;&lt;span style=&quot;font-size: 14px; font-weight: 400; white-space: nowrap;&quot;&gt;) --&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/h3&gt;Os nomes das funções do Dialplan diferenciam &lt;b&gt;maiúsculas&lt;/b&gt; de &lt;b&gt;minúsculas&lt;/b&gt;.&lt;br /&gt;&lt;h3&gt;Dialplan LUA, dicas e trunques&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Operações de longa duração (AutoService)&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Antes de iniciar operações de longa duração, um &lt;b&gt;AutoService&lt;/b&gt; deve ser iniciado usando a função &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;autoservice_start( )&lt;/span&gt;&lt;/b&gt;. Um &lt;b&gt;AutoService&lt;/b&gt; garantirá que o usuário ouça um fluxo contínuo de áudio enquanto seu código LUA funciona em segundo plano. Este &lt;b&gt;AutoService&lt;/b&gt; será interrompido automaticamente antes de executar &lt;b&gt;aplicativos&lt;/b&gt; e &lt;b&gt;funções&lt;/b&gt; do Dialplan e será reiniciado posteriormente. O AutoService pode ser interrompido usando &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;autoservice_stop( )&lt;/span&gt;&lt;/b&gt; e a função &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;autoservice_status( )&lt;/span&gt;&lt;/b&gt; retornará &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;true&lt;/span&gt;&lt;/b&gt; um &lt;b&gt;AutoService&lt;/b&gt; estiver em execução.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.startmusiconhold()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;autoservice_start()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;do_expensive_db_query()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;autoservice_stop()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.stopmusiconhold()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;No Asterisk® SCF™&amp;nbsp;10 e posteriores, um &lt;b&gt;AutoService&lt;/b&gt; é iniciado automaticamente para você por padrão.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span face=&quot;MuseoSans500, sans-serif&quot; style=&quot;background-color: white; color: #857866; font-size: 20px; text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Definindo Extensões Dinamicamente&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Como as extensões são &lt;b&gt;funções&lt;/b&gt; em &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt;, 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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_610185&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;= {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function sip_exten(e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;return&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/&quot;&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;.. e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] = sip_exten(&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;101&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;] = sip_exten(&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;101&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Criação de &#39;aliases&#39; personalizados para construções integradas&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Se você não gosta que a tabela app seja chamada de &#39;&lt;b&gt;app&lt;/b&gt;&#39; ou se acha que digitar &#39;&lt;span face=&quot;&amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; text-align: start;&quot;&gt;&lt;b&gt;channel&lt;/b&gt;&lt;/span&gt;&#39; para acessar a tabela channel é muito trabalhoso, você pode renomeá-los.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;&quot;&gt;&lt;b&gt;Eu prefiro digitar menos&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_207423&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function my_exten(context, extensions)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;c = channel&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;a = app&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;c.my_variable =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;minha nova variável de canal&quot;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;a.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Redefinindo a função print&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;LUA tem uma função &quot;&lt;b&gt;print&lt;/b&gt;&quot; embutida que envia as coisas para o &quot;&lt;b&gt;stdout&lt;/b&gt;&quot;, 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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;function print(...)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;local msg =&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;&quot;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;for&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;i=&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;,select(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&#39;#&#39;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;, ...)&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;do&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;if&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;i ==&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;1&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;then&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;msg = msg .. tostring(select(i, ...))&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;else&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;msg = msg ..&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&quot;\t&quot;&lt;/code&gt;&amp;nbsp;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;.. tostring(select(i, ...))&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;app.verbose(msg)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number12 index11 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number12 index11 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Dividindo a configuração em vários arquivos&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O método &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;require&lt;/span&gt;&lt;/b&gt; pode ser usado para carregar módulos LUA&amp;nbsp;localizados em &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;LUA_PATH&lt;/span&gt;&lt;/b&gt;. O método &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;dofile&lt;/span&gt;&lt;/b&gt;&amp;nbsp; pode ser usado para incluir qualquer arquivo por nome de caminho.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Usando Módulos Externos&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Os módulos LUA podem ser carregados usando o método &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;require&lt;/span&gt;&lt;/b&gt;&amp;nbsp;LUA padrão. Algumas das funcionalidades fornecidas por vários módulos LUA já estão incluídas no Asterisk® SCF™&amp;nbsp;(por exemplo, &lt;b&gt;func_odbc&lt;/b&gt;&amp;nbsp;que fornece o que &lt;b&gt;LuaSQL&lt;/b&gt; fornece). Geralmente é melhor usar código embutido no Asterisk® SCF™&amp;nbsp;em vez de módulos LUA externos. Especificamente, o módulo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;func_odbc&lt;/span&gt;&lt;/b&gt; usa um pool de conexão para fornecer recursos de banco de dados, onde, como com &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;LuaSQL&lt;/span&gt;&lt;/b&gt;, cada canal teria que fazer uma nova conexão com o banco de dados por conta própria.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;Compilando extensions.lua&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O programa &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;luac&lt;/span&gt;&lt;/b&gt; pode ser usado para compilar seu arquivo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.lua&lt;/span&gt;&lt;/b&gt; em bytecode LUA. Isso aumentará um pouco o desempenho, pois o &lt;b&gt;pbx_lua&lt;/b&gt; não precisará mais analisar &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;extensions.lua&lt;/span&gt;&lt;/b&gt; durante o carregamento. O compilador &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;luac&lt;/span&gt;&lt;/b&gt; também detectará e relatará quaisquer erros de sintaxe. Para usar &lt;b&gt;luac&lt;/b&gt;, renomeie seu arquivo extensions.lua e execute o seguinte.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;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: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;&quot;&gt;&lt;b&gt;Suponha que você nomeie seu arquivo extensions.lua para extensions.lua.lua&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_198832&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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;&quot;&gt;&lt;tr style=&quot;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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;luac -o extensions.lua extensions.lua.lua&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O módulo &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;pbx_lua&lt;/span&gt;&lt;/b&gt; reconhece automaticamente a diferença entre um arquivo de texto LUA e um arquivo de bytecode LUA.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&lt;b style=&quot;background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;Tkat&#39;s All Folks!&lt;/b&gt;&amp;nbsp;(É por hoje é só, pessoal!).&lt;/div&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&lt;br style=&quot;outline: 0px; transition: all 0.3s ease 0s;&quot; /&gt;&lt;/div&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html&quot; style=&quot;background: 0px 0px; border: 0px; color: #446cb3; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;Aprenda Lua em 15 minutos!&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;span face=&quot;&amp;quot;Open Sans&amp;quot;, sans-serif&quot; style=&quot;background-color: white; color: #5e5e5e; font-size: 15px;&quot;&gt;Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://t.me/asteriskluabr&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; color: #446cb3; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;https://t.me/asteriskluabr&lt;/a&gt;&lt;span face=&quot;&amp;quot;Open Sans&amp;quot;, sans-serif&quot; style=&quot;background-color: white; color: #5e5e5e; font-size: 15px;&quot;&gt;).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/6287488939161688705/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/6287488939161688705' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6287488939161688705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/6287488939161688705'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2020/12/asterisk-scf-lua-configuracao-do-lua_25.html' title='Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 02)'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s72-c/AstLUA-BR.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5351570291681062564.post-4773079687191823371</id><published>2020-12-24T05:58:00.006-10:00</published><updated>2020-12-26T07:43:22.262-10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Asterisk® SCF™"/><category scheme="http://www.blogger.com/atom/ns#" term="Dialplan LUA"/><title type='text'>Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 01)</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Criado por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;Matthew Nicholson&lt;/b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, modificado pela última vez por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;Rusty Newton&lt;/b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, tradução técnica e adaptação para o Brasil por&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;Angelo Delphini&lt;/b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s1024/AstLUA-BR.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s320/AstLUA-BR.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;O Asterisk® SCF™ suporta a habilidade de escrever instruções de Dialplan na linguagem de programação &lt;b&gt;&lt;a href=&quot;https://www.lua.org/portugues.html&quot; target=&quot;_blank&quot;&gt;LUA&lt;/a&gt;&lt;/b&gt;. Este método pode ser usado como alternativa ou em combinação com &lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;b&gt;extensions.conf &lt;/b&gt;&lt;/span&gt;e/ou &lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;b&gt;AEL&lt;/b&gt;&lt;/span&gt;. O PBX LUA permite que os usuários usem todo o poder de &lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;b&gt;LUA&lt;/b&gt;&lt;/span&gt; para desenvolver aplicativos de telefonia usando o Asterisk® SCF™. A configuração do Dialplan LUA é feita no arquivo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/span&gt;. Lembro que o CORE/PBX do Asterisk® SCF™ aceita que os três arquivos seja utilizado pelo Dialplan simultaneamente &lt;b&gt;extensions.conf&lt;/b&gt;, &lt;b&gt;extensions.ael&lt;/b&gt; e &lt;b&gt;extensions.lua&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Dependências&lt;/h3&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Para usar o &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;pbx_lua&lt;/b&gt;&lt;/span&gt;, as bibliotecas de desenvolvimento lua devem ser instaladas antes que o Asterisk® SCF™ seja configurado e compilado. Você pode obter essas bibliotecas diretamente em &lt;a href=&quot;http://lua.org&quot; target=&quot;_blank&quot;&gt;http://lua.org&lt;/a&gt; , mas é mais fácil instalá-las usando a ferramenta de gerenciamento de pacotes da sua distribuição. O pacote provavelmente é denominado &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;liblua5.1-dev&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;liblua-dev&lt;/b&gt;&lt;/span&gt; ou &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;lua-devel&lt;/b&gt;&lt;/span&gt;, dependendo de sua distribuição &lt;b&gt;GNU/Linux&lt;/b&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h3&gt;PBX LUA Básico &lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;O arquivo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/span&gt; é usado para configurar &lt;b&gt;PBX LUA&lt;/b&gt; 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 &#39;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions&lt;/b&gt;&lt;/span&gt;&#39; 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.&lt;br /&gt;&lt;br /&gt;Cada extensão é uma &lt;b&gt;função&lt;/b&gt; 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 &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.conf&lt;/b&gt;&lt;/span&gt; e a &lt;b&gt;ordem de correspondência é idêntica&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;-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: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;b style=&quot;color: #333333;&quot;&gt;extensions.lua&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_254150&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1639.77px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tbody style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;tr style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;= {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function(context, extension)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.playback(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;please-hold&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;60&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;101&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function(c, e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/101&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;60&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;O arquivo extensions.lua pode ser recarregado, recarregando o módulo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;pbx_lua&lt;/b&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;*CLI&amp;gt; module reload pbx_lua&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Se houver erros no arquivo, eles serão relatados (no *CLI&amp;gt;) e o arquivo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/span&gt; existente permanecerá em uso (tal como é com o &lt;b&gt;CONF&lt;/b&gt; e &lt;b&gt;AEL&lt;/b&gt;).&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Os canais que existiam antes do comando &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;reload&lt;/b&gt;&lt;/span&gt; ser emitido também continuarão a usar o arquivo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;extensions.lua&lt;/b&gt;&lt;/span&gt; &lt;b&gt;existente&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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 &lt;a href=&quot;https://downloads.asterisk.org/pub/telephony/certified-asterisk/&quot; target=&quot;_blank&quot;&gt;Certified&lt;/a&gt; do Asterisk® SCF™ para produção junto ao seu cliente. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt; &lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;OBS:&amp;nbsp;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. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h2&gt;Referência Dialplan para LUA&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;Padrões de extensões (Extension Patternes);&lt;/li&gt;&lt;li&gt;Include em contextos (Context Includes);&lt;/li&gt;&lt;li&gt;Rotações (Loops);&lt;/li&gt;&lt;li&gt;Variáveis (Variables);&lt;/li&gt;&lt;li&gt;Formularios (Applications);&lt;/li&gt;&lt;li&gt;Macros/GoSub;&lt;/li&gt;&lt;li&gt;Goto;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Padrões de extensões (Extension Patternes)&lt;/h3&gt;&lt;p&gt;A sintaxe de correspondência de padrão de extensão na lógica funciona da mesma forma para extensions.conf e extensions.lua.&lt;/p&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.conf&quot; style=&quot;-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;&quot;&gt;extensions.conf&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_987297&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[users]&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt; _1XX,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Dial(SIP/${EXTEN})&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt; _2XX,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Voicemail(${EXTEN:&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;})&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.lua&quot; style=&quot;-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;&quot;&gt;extensions.lua&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_415611&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions.users = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions.users[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;_1XX&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function(c, e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/&quot;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;.. e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions.users[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;_2XX&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function(c, e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.voicemail(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;1&quot;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;.. e:sub(&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;2&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;))&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;Include em contextos (Context Includes) &lt;br /&gt;&lt;/h3&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.conf.1&quot; style=&quot;-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;&quot;&gt;extensions.conf&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_819944&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[users]&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Noop&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,n,Dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[demo]&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt; s,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Noop&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt; s,n,Playback(demo-congrats)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;]&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;include =&amp;gt; demo&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;include =&amp;gt; users&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.lua.1&quot; style=&quot;-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;&quot;&gt;extensions.lua&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_716414&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;users = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;demo = {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;s&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.playback(demo-congrats)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number12 index11 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number13 index12 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number14 index13 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;= {&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number15 index14 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;include = {&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;demo&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;users&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number16 index15 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;};&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number17 index16 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Rotações (Loops) &lt;br /&gt;&lt;/h3&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.conf.2&quot; style=&quot;-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;&quot;&gt;extensions.conf&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_179152&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Noop&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,n,Set(i=&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;0&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,n,While($[i &amp;lt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;10&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;])&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,n,Verbose(i = ${i})&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,n,EndWhile&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.lua.2&quot; style=&quot;-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;&quot;&gt;extensions.lua&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_31724&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;i =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;0&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;while&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;i &amp;lt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;10&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;do&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.verbose(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;i = &quot;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;.. i)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h3&gt;Variáveis (Variables)&lt;/h3&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.conf.3&quot; style=&quot;-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;&quot;&gt;extensions.conf&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_340006&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Set(my_variable=my_value)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,n,Verbose(my_variable = ${my_variable})&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.lua.3&quot; style=&quot;-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;&quot;&gt;extensions.lua&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_3170&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;channel.my_variable =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;my_value&quot;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.verbose(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;my_variable = &quot;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;.. channel.my_variable:get())&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Formularios (Applications) &lt;br /&gt;&lt;/h3&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.conf.4&quot; style=&quot;-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;&quot;&gt;extensions.conf&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_111794&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,,m)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.lua.4&quot; style=&quot;-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;&quot;&gt;extensions.lua&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_380272&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;, nil,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;m&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;Macros/GoSub &lt;br /&gt;&lt;/h3&gt;&lt;p&gt;As MACROS pode ser definidas em pbx_lua nomeando um contexto &quot;macro-*&quot; assim como em extensions.conf, mas geralmente onde você usaria macros ou GoSub em extensions.conf você&amp;nbsp; simplesmente usaria uma função em LUA.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.conf.5&quot; style=&quot;-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;&quot;&gt;extensions.conf&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_741198&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[macro-dial]&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt; s,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Noop&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt; s,n,Dial(${ARG1})&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;]&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Macro(dial,SIP/&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.lua.5&quot; style=&quot;-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;&quot;&gt;extensions.lua&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_996658&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;= {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;function dial(resource)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.dial(resource)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;dial(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;SIP/100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;GoTo&lt;/p&gt;&lt;p&gt;Embora &lt;b&gt;GoTo&lt;/b&gt; seja um STAPLE (grampo) extensions.conf, geralmente deve ser evitado em PBX_LUA em favor de funções.&lt;/p&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.conf.6&quot; style=&quot;-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;&quot;&gt;extensions.conf&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_60988&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;]&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Goto(&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;102&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;102&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,Playback(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;demo-thanks&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;exten =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;102&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,n,Hangup&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;DialplantoLuaReference-extensions.lua.6&quot; style=&quot;-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;&quot;&gt;extensions.lua&lt;/h2&gt;&lt;div class=&quot;code panel pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_704651&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions = {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;= {}&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;function do_hangup()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.playback(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;demo-thanks&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.hangup()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number7 index6 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number8 index7 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number9 index8 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;extensions.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;default&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;[&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;100&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;] = function()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number10 index9 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;do_hangup()&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number11 index10 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;A função app.goto() não funcionará como esperado em pbx_lua em&amp;nbsp; 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.&lt;/p&gt;&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;-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: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;b style=&quot;color: #333333;&quot;&gt;In Asterisk 1.8, use return&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, 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;&quot;&gt;&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;div class=&quot;syntaxhighlighter nogutter java&quot; id=&quot;highlighter_754224&quot; style=&quot;background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1591.29px;&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: 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;&quot;&gt;&lt;tbody style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;tr style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;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, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot; title=&quot;Hint: double-click to select code&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;function extension_function(c, e)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;return&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.&lt;/code&gt;&lt;code class=&quot;java keyword&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, 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;&quot;&gt;goto&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;default&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;100&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;1&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;-- without that&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&#39;return&#39;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;the rest of the function would execute normally&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java spaces&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;app.verbose(&lt;/code&gt;&lt;code class=&quot;java string&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&quot;Did you forget to use &#39;return&#39;?&quot;&lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;)&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; 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;&quot;&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;end&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Tkat&#39;s All Folks!&lt;/b&gt; (É por hoje é só, pessoal!).&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html&quot; target=&quot;_blank&quot;&gt;Aprenda Lua em 15 minutos!&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/div&gt;Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos
 em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram:&amp;nbsp;&lt;a href=&quot;https://t.me/asteriskluabr&quot; target=&quot;_blank&quot;&gt;https://t.me/asteriskluabr&lt;/a&gt;).&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.delphini.tel/feeds/4773079687191823371/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5351570291681062564/4773079687191823371' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4773079687191823371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5351570291681062564/posts/default/4773079687191823371'/><link rel='alternate' type='text/html' href='http://www.delphini.tel/2020/12/asterisk-scf-lua-configuracao-do-lua.html' title='Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 01)'/><author><name>Angelo Delphini</name><uri>http://www.blogger.com/profile/02705805373318513551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-_FWtqDiDqZbtQarBMKMFotow4f2b71w-ooQDfUJVbiggBXxqfQrcnAhKDE8V-zUD47jpF7bHFFhiSZ6gWjiGs61aBIeVKxVKicm52luthQl8EAlZiLgGC24MvUJwjFgAB_50vMfZVE/s72-c/AstLUA-BR.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>