Uma das facilidade mais utilizadas em telefonia é a de bloquear um determinado ramal para que não faça ligações enquanto o usuário não estiver na sala.

Este bloqueio é feito pelo usuário do ramal habilitando e desabilitando com o uso de um código e senha diretamente no ramal que será bloqueado.

Irei descrever como configurar esta facilidade utilizando o AstDB, um banco de dados padrão do Asterisk e que utiliza a arquitetura de família e chaves.

Para que o usuário possa habilitar ou desabilitar o cadeado será necessário que ele utilize uma senha, esta senha deverá ser cadastrada préviamente do próprio telefone, portanto vamos ao contexto que irá permitir criar as senhas de usuário.

Como funciona este contexto:

– Para criar uma senha de usuário basta digitar 99, será solicitada a senha e ao final será ouvido um beep.

– Caso o ramal já possua senha de usuário a ligação será desconectada.

– Para apagar a senha existente digite 991234 a partir do ramal (mude esta extenção).

Crie este contexto ao final do arquivo extensions.conf.

[accountcode]
; criar senha de usuario
;

exten=>99,1,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
        same=>n,GotoIF($["${DB(accountcode/${PROTOCOL}/${DEVICE:0:4})}"=""]?create-accountcode:end)
        same=>n(create-accountcode),Answer()
        same=>n,BackGround(vm-password)
        same=>n,Read(password)
        same=>n,Set(DB(accountcode/${PROTOCOL}/${DEVICE:0:4})=${password})
        same=>n,Answer()
        same=>n,Wait(1)
        same=>n,PlayBack(beep)
        same=>n,Hangup()
        same=>n(end),PlayBack(vm-goodbye)
        same=>n,Hangup()

; apagar senha de usuario
;
exten=>991234,1,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,Set(DB(accountcode/${PROTOCOL}/${DEVICE:0:4})="")
        same=>n,Answer()
        same=>n,Wait(1)
        same=>n,Playback(beep)
        same=>n,Hangup()

Agora iremos criar o contexto que habilita e desabilita o cadeado.

Como funciona este contexto:

– Para habilitar o cadeado disque a partir do ramal o código 50, será solicitada a senha de usuário que se digitada corretamente habilitará o cadeado, um beep confirmará a ação.

– Para desabilitar o cadeado disque 51, será solicitada a senha de usuário e a confirmação será informada com um beep.

Insira o contexto ao final do arquivo extensions.conf.

[cadeado]
;habilitar cadeado
;
exten=>50,1,Answer()
        same=>n,Wait(1)
        same=>n,BackGround(vm-password)
        same=>n,Read(password)
        same=>n,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
        same=>n,GotoIF($["${DB(accountcode/${PROTOCOL}/${DEVICE:0:4})}"="${password}"]?lock)
        same=>n,Hangup()
        same=>n(lock),Set(DB(cadeado/${PROTOCOL}/${DEVICE:0:4})=1)
        same=>n,Wait(1)
        same=>n,PlayBack(beep)
        same=>n,Hangup()

;desabilitar cadeado
;
exten=>51,1,Answer()
        same=>n,Wait(1)
        same=>n,BackGround(vm-password)
        same=>n,Read(password)
        same=>n,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
        same=>n,GotoIF($["${DB(accountcode/${PROTOCOL}/${DEVICE:0:4})}"="${password}"]?unlock)
        same=>n,Hangup()
        same=>n(unlock),Set(DB(cadeado/${PROTOCOL}/${DEVICE:0:4})=0)
        same=>n,Wait(1)
        same=>n,PlayBack(beep)
        same=>n,Hangup()

Nos meus cursos de Asterisk utilizo um exemplo de discagem com Macro, esta macro testa se o ramal escolhido esta disponível, ocupado ou indisponível, iremos adicionar as regras que irão validar antes de discar se o cadeado foi habilitado ou não.

Insira esta macro antes dos demais contextos no arquivo extensions.conf.

[macro-discainterno]
exten=>s,1,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
 same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
 same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
 same=>n,Set(CADEADO=${DB(cadeado/${PROTOCOL}/${DEVICE:0:4})})
 same=>n,GotoIF($["${CADEADO}"<"1"]?Dial)
 same=>n,Hangup()
        same=>n(Dial),Dial(${ARG1}/${ARG2},${ARG3})
        same=>n,Goto(call-${DIALSTATUS})
;       same=>n(call-NOANSWER),PlayBack(naoatende)
        same=>n(call-NOANSWER),VoiceMail(${ARG2},u)
        same=>n,Hangup()
;       same=>n(call-BUSY),PlayBack(ocupado)
        same=>n(call-BUSY),VoiceMail(${ARG2},b)
        same=>n,Hangup()
;       same=>n(call-CHANUNAVAIL),PlayBack(indisponivel)
        same=>n(call-CHANUNAVAIL),VoiceMail(${ARG2},b)
        same=>n,Hangup()

Ainda no plano de discagem crie as regras de discagem entre ramais, como no exemplo abaixo, e adicione os contextos cadeado e accountcode:

[interno]
include=>cadeado
include=>accountcode

; Discar para ramais SIP
;
exten=>_2XXX,1,Macro(discainterno,SIP,${EXTEN},20)
        same=>n,Hangup()

; Discar para ramais IAX2
;
exten=>2001,1,Macro(discainterno,IAX2,2001,20)
        same=>n,Hangup()

; Discar para ramais FXS a partir de interfaces DigiVoice
;
exten=>3000,1,Macro(discainterno,DGV,63,30)

exten=>3001,1,Macro(discainterno,DGV,64,30)

Abraços a todos e sintam-se a vontade para compartilhar ou dirimir dúvidas.

Muito obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br 

Nosso amigo Cristiano Valença da empresa Smile Saúde desenvolveu um código em PHP para envio de SMS utilizando placas DigiVoice VB0404 GSM, e autorizou sua publicação no Blog. Muito obrigado Cristiano.

Adicionado em 27/08/2012
– Copiar e colar o código abaixo pode não funcionar, para evitar isso coloco o arquivo para download no endereço abaixo, o arquivo  encontra-se compactado em RAR:

clique aqui para baixar o arquivo enviarMsg.rar

Código em PHP.

<?php

session_start();

if(isset($_POST[‘enviar’]))
{
$retorno = system(‘rasterisk -x \’dgv send sms ‘.$_POST[‘chip’].’ ‘.$_POST[‘destino’].’ “‘.$_POST[‘msg’].'”\”);
if(empty($retorno))
{
echo ‘<script>alert(“Mensagem enviada com sucesso!”);</script>’;
}
else
{
echo ‘<script>alert(“Falha ao enviar mensagem!”);</script>’;
}
}

?>
<html>
<head>
<title>
Envio de Mensagens Via PHP Utilizando uma Placa Digivoice VB0404GSM PCIex
</title>
<style>
*{
margin: 0px;
padding: 0px;
font-family: verdana;
}

#conteudo{
width: 200px;
margin: 10px auto auto 10px;
padding: 5px 0px 5px 15px;
border: 1px solid silver;
}

p{
text-align: center;
margin: auto auto 15px -18px;
}

label{
float: left;
width: 200px;
margin: 5px 0px 20px 0px;
font-size: 12px;
}

label input{
width: 150px;
font-size: 10px;
}

label textarea{
width: 180px;
font-size: 10px;
}

input[type=submit]{
margin-left: 25px;
}
</style>

</head>
<body>
<div id=”conteudo”>
<form name=”form1″ id=”form1″ method=”post” action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>” >

<p>Envio de SMS</p>

<label> N˙mero de Destino:
<input type=”text” name=”destino” id=”destino” value=”88888888″ />
</label>

<label> Mensagem: (160 Caracteres)
<textarea name=”msg”>Insira sua mensagem aqui</textarea>
</label>

<label> Escolha o chip de saida:
<select name=”chip” id=”chip”>
<option value=”1″>Chip 1</option>
<option value=”2″>Chip 2</option>
<option value=”3″>Chip 3</option>
<option value=”4″>Chip 4</option>
</select>
</label>

<input type=”submit” name=”enviar” value=”Enviar Mensagem” />

</form>
</div>
</body>
</html>

Abraços,

 Wagner Antonio Barth
 wagner@barth.com.br
Editado: 27/08/2012

Treinamento de Asterisk.

Este curso foi totalmente atualizado para a versão 1.8 do Asterisk.

Ementa do curso atualizado, clique nas fotos e veja o conteúdo.

     

Mais uma turma que concluiu com sucesso o treinamento de Asterisk, muito obrigado a todos e vamos as fotos.

Laboratório

  

Posando pra foto.

Muito obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br Editado em 19/08/2012

Acabo de criar alguns tutoriais que irão auxiliar a instalar placas DigiVoice e o banco de canais CB3000 TDMoE.

Qualquer dúvida que vir a surgir fiquem a vontade de perguntar e quaisquer implementações também.

Os tutoriais podem ser baixados pelo link: baixe aqui os tutoriais

 

Muito obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br 

 

 

O Asterisk 10 trocou seu banco de dados AstDB da Berkley DB para o mais robusto SQLite3. Esta mudança não implicará em nenhuma alteração nos sistemas que utilizavam o Berkley Db pois foi introduzida uma ferramenta de conversão em runtime, a astdb2sqlite3, esta ferramenta pode ser instalada a partir do MenuSelect que encontra-se na seção Utils.

Fonte: ChangeLog Asterisk.

Asterisk Database
—————–
* The internal Asterisk database has been switched from Berkeley DB 1.86 to SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3 utility in the UTILS section of menuselect. If an existing astdb is found and no astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will convert an existing astdb to the SQLite3 version automatically at runtime.

Abraços a todos,

Muito obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br 

Este curso é voltado a preparar profissionais da área de Sistemas de Informação para este maravilhoso mundo de Telefonia.

Abordamos desde o básico em sistemas de telefonia convencional até o estudo da troca de sinalizações E1 R2/MFC.

Para construir um PABX-IP utilizamos a plataforma Asterisk embarcada na solução/distribuição Meucci BE da DigiVoice.

Maiores detalhes comercial@digivoice.com.br.

Muito obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br 

Treinamento de Asterisk.

Mais uma turma que concluiu com sucesso o treinamento e vamos compartilhar mais fotos.

Laboratórios.

Posando pra foto.

Muito obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br 

Concluímos com a missão de mais uma turma de Asterisk Básico.

Fotos.

Laboratórios.

 

Posando para Foto.

Muito obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br
Editado – 24/06/2012

Este foi mais um curso voltado a preparar profissionais da área de Sistemas de Informação para este maravilhoso mundo de Telefonia.

Abordamos desde o básico em sistemas de telefonia convencional até o estudo da troca de sinalizações E1 R2/MFC.

Para construir um PABX-IP utilizamos a plataforma Asterisk embarcada na solução/distribuição Meucci BE da DigiVoice.

Muito obrigado a todos que participaram e vamos as fotos.

Laboratório.

Posando pra foto.

Novamente muito obrigado a todos.

 Wagner Antonio Barth
 wagner@barth.com.br 

Mais uma turma e como sempre vamos as fotos.

 

Posando pra foto.

Laboratório.

Agradeço a todos pela presença.

Muito Obrigado,

 Wagner Antonio Barth
 wagner@barth.com.br