{"id":263,"date":"2012-08-19T16:50:26","date_gmt":"2012-08-19T16:50:26","guid":{"rendered":"http:\/\/barth.com.br\/blog\/?p=263"},"modified":"2012-08-20T19:25:27","modified_gmt":"2012-08-20T19:25:27","slug":"cadeado-utilizando-astdb","status":"publish","type":"post","link":"https:\/\/barth.com.br\/blog\/?p=263","title":{"rendered":"Cadeado utilizando AstDB"},"content":{"rendered":"<p>Uma das facilidade mais utilizadas em telefonia \u00e9 a de bloquear um determinado ramal para que n\u00e3o fa\u00e7a liga\u00e7\u00f5es enquanto o usu\u00e1rio n\u00e3o estiver na sala.<\/p>\n<p>Este bloqueio \u00e9 feito pelo usu\u00e1rio do ramal habilitando e desabilitando com o uso de um c\u00f3digo e senha diretamente no ramal que ser\u00e1 bloqueado.<\/p>\n<p>Irei descrever como configurar esta facilidade utilizando o AstDB, um banco de dados padr\u00e3o do Asterisk e que utiliza a arquitetura de fam\u00edlia e chaves.<\/p>\n<p>Para que o usu\u00e1rio possa habilitar ou desabilitar o cadeado ser\u00e1 necess\u00e1rio que ele utilize uma senha, esta senha dever\u00e1 ser cadastrada pr\u00e9viamente do pr\u00f3prio telefone, portanto vamos ao contexto que ir\u00e1 permitir criar as senhas de usu\u00e1rio.<\/p>\n<p>Como funciona este contexto:<\/p>\n<p>&#8211; Para criar uma senha de usu\u00e1rio basta digitar 99, ser\u00e1 solicitada a senha e ao final ser\u00e1 ouvido um beep.<\/p>\n<p>&#8211; Caso o ramal j\u00e1 possua senha de usu\u00e1rio a liga\u00e7\u00e3o ser\u00e1 desconectada.<\/p>\n<p>&#8211; Para apagar a senha existente digite 991234 a partir do ramal (mude esta exten\u00e7\u00e3o).<\/p>\n<p>Crie este contexto ao final do arquivo extensions.conf.<\/p>\n<pre>[accountcode]\r\n; criar senha de usuario\r\n;\r\n\r\nexten=&gt;99,1,Set(PROTOCOL=${CUT(CHANNEL,\/,1)})\r\n        same=&gt;n,Set(DEVICE=${CUT(CHANNEL,\/,2)})\r\n        same=&gt;n,NoOP(${PROTOCOL}\/${DEVICE:0:4})\r\n        same=&gt;n,GotoIF($[\"${DB(accountcode\/${PROTOCOL}\/${DEVICE:0:4})}\"=\"\"]?create-accountcode:end)\r\n        same=&gt;n(create-accountcode),Answer()\r\n        same=&gt;n,BackGround(vm-password)\r\n        same=&gt;n,Read(password)\r\n        same=&gt;n,Set(DB(accountcode\/${PROTOCOL}\/${DEVICE:0:4})=${password})\r\n        same=&gt;n,Answer()\r\n        same=&gt;n,Wait(1)\r\n        same=&gt;n,PlayBack(beep)\r\n        same=&gt;n,Hangup()\r\n        same=&gt;n(end),PlayBack(vm-goodbye)\r\n        same=&gt;n,Hangup()\r\n\r\n; apagar senha de usuario\r\n;\r\nexten=&gt;991234,1,Set(PROTOCOL=${CUT(CHANNEL,\/,1)})\r\n        same=&gt;n,Set(DEVICE=${CUT(CHANNEL,\/,2)})\r\n        same=&gt;n,Set(DB(accountcode\/${PROTOCOL}\/${DEVICE:0:4})=\"\")\r\n        same=&gt;n,Answer()\r\n        same=&gt;n,Wait(1)\r\n        same=&gt;n,Playback(beep)\r\n        same=&gt;n,Hangup()<\/pre>\n<p>Agora iremos criar o contexto que habilita e desabilita o cadeado.<\/p>\n<p>Como funciona este contexto:<\/p>\n<p>&#8211; Para habilitar o cadeado disque a partir do ramal o c\u00f3digo 50, ser\u00e1 solicitada a senha de usu\u00e1rio que se digitada corretamente habilitar\u00e1 o cadeado, um beep confirmar\u00e1 a a\u00e7\u00e3o.<\/p>\n<p>&#8211; Para desabilitar o cadeado disque 51, ser\u00e1 solicitada a senha de usu\u00e1rio e a confirma\u00e7\u00e3o ser\u00e1 informada com um beep.<\/p>\n<p>Insira o contexto ao final do arquivo extensions.conf.<\/p>\n<pre>[cadeado]\r\n;habilitar cadeado\r\n;\r\nexten=&gt;50,1,Answer()\r\n        same=&gt;n,Wait(1)\r\n        same=&gt;n,BackGround(vm-password)\r\n        same=&gt;n,Read(password)\r\n        same=&gt;n,Set(PROTOCOL=${CUT(CHANNEL,\/,1)})\r\n        same=&gt;n,Set(DEVICE=${CUT(CHANNEL,\/,2)})\r\n        same=&gt;n,NoOP(${PROTOCOL}\/${DEVICE:0:4})\r\n        same=&gt;n,GotoIF($[\"${DB(accountcode\/${PROTOCOL}\/${DEVICE:0:4})}\"=\"${password}\"]?lock)\r\n        same=&gt;n,Hangup()\r\n        same=&gt;n(lock),Set(DB(cadeado\/${PROTOCOL}\/${DEVICE:0:4})=1)\r\n        same=&gt;n,Wait(1)\r\n        same=&gt;n,PlayBack(beep)\r\n        same=&gt;n,Hangup()\r\n\r\n;desabilitar cadeado\r\n;\r\nexten=&gt;51,1,Answer()\r\n        same=&gt;n,Wait(1)\r\n        same=&gt;n,BackGround(vm-password)\r\n        same=&gt;n,Read(password)\r\n        same=&gt;n,Set(PROTOCOL=${CUT(CHANNEL,\/,1)})\r\n        same=&gt;n,Set(DEVICE=${CUT(CHANNEL,\/,2)})\r\n        same=&gt;n,NoOP(${PROTOCOL}\/${DEVICE:0:4})\r\n        same=&gt;n,GotoIF($[\"${DB(accountcode\/${PROTOCOL}\/${DEVICE:0:4})}\"=\"${password}\"]?unlock)\r\n        same=&gt;n,Hangup()\r\n        same=&gt;n(unlock),Set(DB(cadeado\/${PROTOCOL}\/${DEVICE:0:4})=0)\r\n        same=&gt;n,Wait(1)\r\n        same=&gt;n,PlayBack(beep)\r\n        same=&gt;n,Hangup()<\/pre>\n<p>Nos meus cursos de Asterisk utilizo um exemplo de discagem com Macro, esta macro testa se o ramal escolhido esta dispon\u00edvel, ocupado ou indispon\u00edvel, iremos adicionar as regras que ir\u00e3o validar antes de discar se o cadeado foi habilitado ou n\u00e3o.<\/p>\n<p>Insira esta macro antes dos demais contextos no arquivo extensions.conf.<\/p>\n<pre>[macro-discainterno]\r\n<strong>exten=&gt;s,1,Set(PROTOCOL=${CUT(CHANNEL,\/,1)})<\/strong>\r\n<strong> same=&gt;n,Set(DEVICE=${CUT(CHANNEL,\/,2)})<\/strong>\r\n<strong> same=&gt;n,NoOP(${PROTOCOL}\/${DEVICE:0:4})<\/strong>\r\n<strong> same=&gt;n,Set(CADEADO=${DB(cadeado\/${PROTOCOL}\/${DEVICE:0:4})})<\/strong>\r\n<strong> same=&gt;n,GotoIF($[\"${CADEADO}\"&lt;\"1\"]?Dial)<\/strong>\r\n<strong> same=&gt;n,Hangup()<\/strong>\r\n        same=&gt;n(Dial),Dial(${ARG1}\/${ARG2},${ARG3})\r\n        same=&gt;n,Goto(call-${DIALSTATUS})\r\n;       same=&gt;n(call-NOANSWER),PlayBack(naoatende)\r\n        same=&gt;n(call-NOANSWER),VoiceMail(${ARG2},u)\r\n        same=&gt;n,Hangup()\r\n;       same=&gt;n(call-BUSY),PlayBack(ocupado)\r\n        same=&gt;n(call-BUSY),VoiceMail(${ARG2},b)\r\n        same=&gt;n,Hangup()\r\n;       same=&gt;n(call-CHANUNAVAIL),PlayBack(indisponivel)\r\n        same=&gt;n(call-CHANUNAVAIL),VoiceMail(${ARG2},b)\r\n        same=&gt;n,Hangup()<\/pre>\n<p>Ainda no plano de discagem crie as regras de discagem entre ramais, como no exemplo abaixo, e adicione os contextos cadeado e accountcode:<\/p>\n<pre>[interno]\r\ninclude=&gt;cadeado\r\ninclude=&gt;accountcode<\/pre>\n<pre><\/pre>\n<pre>; Discar para ramais SIP\r\n;\r\nexten=&gt;_2XXX,1,Macro(discainterno,SIP,${EXTEN},20)\r\n        same=&gt;n,Hangup()\r\n\r\n; Discar para ramais IAX2\r\n;\r\nexten=&gt;2001,1,Macro(discainterno,IAX2,2001,20)\r\n        same=&gt;n,Hangup()\r\n\r\n; Discar para ramais FXS a partir de interfaces DigiVoice\r\n;\r\nexten=&gt;3000,1,Macro(discainterno,DGV,63,30)\r\n\r\nexten=&gt;3001,1,Macro(discainterno,DGV,64,30)<\/pre>\n<p>Abra\u00e7os a todos e sintam-se a vontade para compartilhar ou dirimir d\u00favidas.<\/p>\n<p>Muito obrigado,<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/barth.com.br\/blog\/wp-content\/uploads\/2012\/01\/blog-avatar1.jpg\"><img decoding=\"async\" loading=\"lazy\" title=\"blog-avatar\" src=\"http:\/\/barth.com.br\/blog\/wp-content\/uploads\/2012\/01\/blog-avatar1-211x300.jpg\" alt=\"\" width=\"22\" height=\"32\" \/><\/a><\/td>\n<td>\u00a0Wagner Antonio Barth<br \/>\n<em>\u00a0wagner@barth.com.br\u00a0<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Uma das facilidade mais utilizadas em telefonia \u00e9 a de bloquear um determinado ramal para que n\u00e3o fa\u00e7a liga\u00e7\u00f5es enquanto o usu\u00e1rio n\u00e3o estiver na sala. Este bloqueio \u00e9 feito pelo usu\u00e1rio do ramal habilitando e desabilitando com o uso de um c\u00f3digo e senha diretamente no ramal que ser\u00e1 bloqueado. Irei descrever como configurar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/263"}],"collection":[{"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=263"}],"version-history":[{"count":5,"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/263\/revisions"}],"predecessor-version":[{"id":267,"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/263\/revisions\/267"}],"wp:attachment":[{"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/barth.com.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}