<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Guax &#187; dialplan</title>
	<atom:link href="http://www.guax.net/tag/dialplan/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.guax.net/blog</link>
	<description>“…is like having your brains smashed out by a slice of lemon wrapped round a large gold brick.”</description>
	<lastBuildDate>Sun, 22 May 2011 14:22:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Asterisk Trick nº 3: Usando Read para URA&#8217;s</title>
		<link>http://www.guax.net/blog/2010/03/asterisk-trick-n%c2%ba-3-usando-read-para-uras/</link>
		<comments>http://www.guax.net/blog/2010/03/asterisk-trick-n%c2%ba-3-usando-read-para-uras/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 01:18:42 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[dialplan]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[ura]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=304</guid>
		<description><![CDATA[URA&#8217;s (IVR em inglês) são muito comuns em ambientes com Asterisk. E são normalmente construídas usando a aplicação WaitExten e vários contextos para controle do fluxo. A aplicação WaitExten recebe uma entrada vinda do usuário via DTMF e direciona para a extensão correspondente a essa entrada. Essa não é a melhor abordagem por não permitir [...]]]></description>
			<content:encoded><![CDATA[<p>URA&#8217;s (IVR em inglês) são muito comuns em ambientes com Asterisk. E são normalmente construídas usando a aplicação WaitExten e vários contextos para controle do fluxo. A aplicação WaitExten recebe uma entrada vinda do usuário via DTMF e direciona para a extensão correspondente a essa entrada. Essa não é a melhor abordagem por não permitir uma forma fácil de validar a entrada do usuário e de manter consistência no desvio do fluxo da aplicação. Contextos são legais mas se usados sem moderação você acaba com um nível de complexidade tão grande dentro do seu Dialplan que torna a tarefa de debugar e manter o código algo homérico. Lembre-se que uma URA geralmente é um bloco de código que dificilmente será separado ou usado em partes, se sua URA for complexa o suficiente para isso você precisa de uma reavaliação mental antes de arquitetar o sistema telefônico que seus clientes e usuários terão que passar antes de serem atendidos. Afinal pessoas usam o telefone para falar com pessoas, mas esse é papo para outro post.</p>
<p>Veja um bom exemplo de como usar o Read para ler um digito do usuário:</p>
<pre>
exten => _XX.,1,Wait(2)
exten => _XX.,n,Read(OPCAO,bem_vindo_menu,1,,,4)
exten => _XX.,n,GotoIf($["${OPCAO}"!=""]?executa)
exten => _XX.,n,Set(OPCAO=0)
exten => _XX.,n(executa),Goto(${OPCAO},1)
</pre>
<p>A idéia aqui é poder mexer com a entrada do usuário a vontade, sem ter que ser redirecionado para algum lugar logo após alterar o EXTEN ou sem ter que ficar copiando o EXTEN após o waitexten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/blog/2010/03/asterisk-trick-n%c2%ba-3-usando-read-para-uras/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Asterisk Trick nº 1: GotoIf</title>
		<link>http://www.guax.net/blog/2010/03/asterisk-trick-n%c2%ba-1-gotoif/</link>
		<comments>http://www.guax.net/blog/2010/03/asterisk-trick-n%c2%ba-1-gotoif/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 14:41:29 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[dialplan]]></category>
		<category><![CDATA[dica]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=296</guid>
		<description><![CDATA[Dica do dia para o Asterisk. A aplicação GotoIf tem uma sintaxe que pode ser considerada pegadinha de newbie. Veja: exten =&#62; _X.,1,GotoIf($["${VARIAVEL}"=""]?labeltrue:labelfalse) exten =&#62; _X.,n(labeltrue),Noop(Acao a ser executada caso true) exten =&#62; _X.,n(labelfalse),Noop(Acao a ser executada caso false) Observe que é muito parecido com um operador ternário da maioria das linguagens de programação. Dicas: [...]]]></description>
			<content:encoded><![CDATA[<p>Dica do dia para o Asterisk. A aplicação GotoIf tem uma sintaxe que pode ser considerada pegadinha de newbie. Veja:</p>
<pre>exten =&gt; _X.,1,GotoIf($["${VARIAVEL}"=""]?labeltrue:labelfalse)
exten =&gt; _X.,n(labeltrue),Noop(Acao a ser executada caso true)
exten =&gt; _X.,n(labelfalse),Noop(Acao a ser executada caso false)</pre>
<p>Observe que é muito parecido com um operador ternário da maioria das linguagens de programação. Dicas:</p>
<ol>
<li>Não coloque nenhum espaço separando as condicionais, ? e : do contrário ele não lerá &#8220;labeltrue&#8221; mas &#8220;(ESPAÇO)labeltrue(ESPAÇO)&#8221;</li>
<li>Em nenhuma hipotese coloque a variavel sem as &#8221; (aspas duplas) caso a variável seja nula ou não definida você ganha um erro do interpretador e não será levado ao labelfalse</li>
<li>Perceba que $[] delimita que ali está ocorrendo uma comparação ou qualquer operação que retornará 1 ou 0, true ou false.</li>
<li>No lugar das labels &#8220;labeltrue&#8221; e &#8220;labelfalse&#8221; você pode colocar o índice da prioridade sem problema nenhum, nesse caso 2 e 3 respectivamente. Eu prefiro usar label já que ela move junto com minhas edições. E é bem mais legível.</li>
</ol>
<p><strong>Dica adicional:</strong> <cite>&#8220;Sempre escreva seu código como se o cara que vai dar manutenção é um maníaco homicida que sabe onde você mora&#8221; </cite>&#8211; Dicas do Visual Studio</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/blog/2010/03/asterisk-trick-n%c2%ba-1-gotoif/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

